Redis基础使用

2024-06-06


Redis安装使用

使用docker部署redis

docker run --name myredis -dp 6379:6379 \
-v /path/to/your/local/data:/data \
-v /path/to/your/local/redis.conf:/usr/local/etc/redis/redis.conf \
redis 

开启远程连接

redis不建议开启远程访问,一般是在内网访问

在redis.conf中加入如下配置。

bind 0.0.0.0
requirepass 密码

时区配置

redis时区不正确时,可通过如下配置设置为上海时区。

# 进入docker
docker exec -it redis bash

# 修改时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

Redis数据类型

  • string(字符串): 基本的数据存储单元,可以存储字符串、整数或者浮点数。

  • hash(哈希):一个键值对集合,可以存储多个字段。

  • list(列表):一个简单的列表,可以存储一系列的字符串元素。

  • set(集合):一个无序集合,可以存储不重复的字符串元素。

  • zset(sorted set:有序集合): 类似于集合,但是每个元素都有一个分数(score)与之关联。

  • 位图(Bitmaps):基于字符串类型,可以对每个位进行操作。

  • 超日志(HyperLogLogs):用于基数统计,可以估算集合中的唯一元素数量。

  • 地理空间(Geospatial):用于存储地理位置信息。

  • 发布/订阅(Pub/Sub):一种消息通信模式,允许客户端订阅消息通道,并接收发布到该通道的消息。

  • 流(Streams):用于消息队列和日志存储,支持消息的持久化和时间排序。

  • 模块(Modules):Redis 支持动态加载模块,可以扩展 Redis 的功能

Redis常用命令

一些redis的常用命令,并不是全部

连接管理

命令

描述

PING

检查与Redis服务器的连接是否正常,返回PONG。

AUTH password

验证密码,如果Redis服务器设置了密码保护。

SELECT db

选择数据库(0-15)。

ECHO message

打印指定字符串,测试连接用。

服务器管理

命令

描述

FLUSHDB

清空当前数据库中的所有键。

FLUSHALL

清空所有数据库中的所有键。

INFO

返回服务器的信息和统计数据。

SAVE

同步保存数据到磁盘。

BGSAVE

后台异步保存数据到磁盘。

SHUTDOWN

异步保存数据到磁盘并关闭服务器。

操作实例

# 将数据库由0切换为1
redis-windows:0>select 1
"OK"
redis-windows:1>

键操作

命令

描述

DEL key

删除指定的键。

EXISTS key

检查指定的键是否存在。

EXPIRE key seconds

为指定的键设置过期时间(秒)。

TTL key

返回指定键的剩余过期时间(秒)。

KEYS pattern

查找与模式匹配的所有键。

TYPE key

返回指定键值的类型。

RENAME key newkey

重命名指定的键。

MOVE key db

将键从当前数据库移动到指定数据库。

操作实例

# 创建一个值为字符串的键值对
redis-windows:1>set expire_key  hahahaha
"OK"

# 设置过期时间为20s
redis-windows:1>expire expire_key 20
"1"

# 查看过期时间
redis-windows:1>ttl expire_key
"16"

# 过期后查看,键值对被删除
redis-windows:1>get expire_key
null

字符串操作

命令

描述

SET key value

设置指定键的值,没有则创建。

GET key

获取指定键的值。

INCR key

将指定键的值加1(整数)。

DECR key

将指定键的值减1(整数)。

MGET key1 key2 ...

获取多个键的值。

实例

redis命令大小写不敏感

# 新增一个键值对
redis-windows:0>set hello world
"OK"
redis-windows:0>get hello
"world"

# 查看指定键值的类型
redis-windows:1>type hello
"string"

# 根据键修改值
redis-windows:0>set hello loster
"OK"
redis-windows:0>get hello
"loster"

# 修改指定键的名称
redis-windows:1>rename hello sayHi
"OK"
redis-windows:1>get sayHi
"loster"


# 删除一个字符串的,1代表true (操作成功)
redis-windows:0>del hello
"1"
redis-windows:0>get hello
null

redis-windows:1>set num 1
"OK"
# 给指定键的值加1(仅可对整数操作)
redis-windows:1>incr num
"2"

# 获取多个键的值
redis-windows:1>mget sayHi num
1) "loster"
2) "2"

列表操作

列表(list)的元素可以重复,Redis的列表基于双向链表实现,这意味着在头部和尾部的删除和插入操作是高效的,适用于队列和栈(在头部和尾部操作的数据结构)等场景

命令

描述

LPUSH key value1 value2 ...

将一个或多个值插入列表头部。没有则列表则创建

RPUSH key value1 value2 ...

将一个或多个值插入列表尾部。没有则列表则创建

LPOP key

移出并获取列表的第一个元素。

RPOP key

移出并获取列表的最后一个元素。

LRANGE key start stop

获取列表指定范围内的元素。

操作实例

# 创建一个列表,并从头依次插入1 2 3,返回列表的长度为3
redis-windows:1>lpush arr 1 2 3
"3"
# 查看列表指定范围的元素,0 -1 表示查看所有的元素
redis-windows:1>lrange arr 0 -1
1) "3"
2) "2"
3) "1"

# 从尾部依次插入4 5 6,返回列表的长度为6
redis-windows:1>rpush arr 4 5 6
"6"
redis-windows:1>lrange arr 0 -1
1) "3"
2) "2"
3) "1"
4) "4"
5) "5"
6) "6"

# 移除列表第一项,并返回其值
redis-windows:1>lpop arr
"3"
# 移除列表最后一项,并返回其值
redis-windows:1>rpop arr
"6"

# 查看列表所有元素 
redis-windows:1>lrange arr 0 -1
1) "2"
2) "1"
3) "4"
4) "5"

# 删除列表(清空列表)
redis-windows:1>del arr
"1"
redis-windows:1>lrange arr 0 -1

集合操作

集合(set)的元素不可以重复,且无序的(插入和获取时的顺序不一样),Redis的集合是基于哈希表实现的,因此增删改查的效率都较高。

命令

描述

SADD key member1 member2 ...

向集合添加一个或多个成员。不存在则创建

SREM key member1 member2 ...

移除集合中的一个或多个成员。

SMEMBERS key

返回集合中的所有成员。

SISMEMBER key member

判断成员是否是集合的成员。

操作实例

# 创建一个名为set_test的集合,并存入1 2 3。返回的是列表长度
redis-windows:0>sadd set_test 3 2 1 1 2 3
"3"
# 查看集合所有成员,可见集合是不重复且无序的
redis-windows:0>smembers set_test
1) "1"
2) "2"
3) "3"
# 删除集合set_test的1
redis-windows:0>srem set_test 1
"1"
redis-windows:0>smembers set_test
1) "2"
2) "3"

# 判断1是否为set_test的成员,0代表不是,1代表是
redis-windows:0>sismember  set_test 1
"0"
redis-windows:0>sismember set_test 2
"1"

有序集合操作

命令

描述

ZADD key score1 member1 score2 member2 ...

向有序集合添加或更新成员的分数。

ZRANGE key start stop [WITHSCORES]

返回有序集合中指定区间内的成员。WITHSCORES为可选参数,显示成员的分数

ZREM key member1 member2 ...

移除有序集合中的一个或多个成员。

操作实例

redis-windows:0>zadd zset 0 mysql 1 redis 3 monogodb
"3"

# 分数越小越在前面
redis-windows:0>zrange zset 0 -1 withscores
1) "mysql"
2) "0"
3) "redis"
4) "1"
5) "monogodb"
6) "3"

# 新加入如分数跟原来的相同,会排在原来的后面
redis-windows:0>zrange zset 0 -1 withscores
1) "mysql"
2) "0"
3) "postgreSql"
4) "0"
5) "redis"
6) "1"
7) "monogodb"
8) "3"

# 删除postgreSql这个成员
redis-windows:0>zrem zset postgreSql
"1"
redis-windows:0>zrange zset 0 -1 withscores
1) "mysql"
2) "0"
3) "redis"
4) "1"
5) "monogodb"
6) "3"

哈希

命令

描述

HSET key field value

将哈希表中域的值设为value。

HGET key field

获取哈希表中指定字段的值。

HMGET key field1 field2 ...

获取所有给定字段的值。

HDEL key field1 field2 ...

删除一个或多个哈希表字段。

操作实例

# 给hashtable的设置两个字段name,age
redis-windows:0>hset hashtable name loster age 19 
"2"
redis-windows:0>hget hashtable name
"loster"
# 获取age的值
redis-windows:0>hget hashtable age
"19"
# 批量获取值
redis-windows:0>hmget hashtable age name
1) "19"
2) "loster"
# 删除age
redis-windows:0>hdel hashtable age
"1"
# 获取所有的字段和值
redis-windows:0>hgetall hashtable
1) "name"
2) "loster"

redis哈希表数据结构

上面例子的结构可以抽象为如下的结构,看起来更直观一点

hashtable:{
  name:'loster',
  age:'19'
}


PREV
Python数据结构常用操作
NEXT
什么是RPC协议?