Redis 常用数据结构
Redis 常用数据结构有string、hash、list、set、zset,本文会介绍其使用方法和使用场景。
string
string 是字符串类型,以Key-Value形式存储,适用于缓存、计数器、分布式session、分布式全局id等场景。
常用命令
SET key value # 设置指定 key 的值
GET key # 获取指定 key 的值
MSET key value [key value ...] # 批量设置键值对
MGET key [key ...] # 批量获取键值对
INCR key # 将key中储存的数字值加1(原子操作)
DECR key # 将key中储存的数字值减1(原子操作)
DEL key [key ...] # 批量删除键值对
EXPIRE key seconds # 设置key的过期时间(秒)
使用场景
# 缓存
set num 123
get num
# 过期缓存
set code 123456
expire code 300 (300秒后redis自动删除该key)
# 计数器
incr count # count=1
incr count # count=2
# 分布式session
基于Spring Session + redis实现跨容器之间的Session共享
# 分布式全局id
在分库分表的场景下,可以使用redis维护数据库的全局id。
hash
hash 是一个 string 类型的 field 和 value 的映射表,适合用于存储对象的场景。
常用命令
HSET key field value # 设置哈希表key中的field的值
HGET key field # 获取哈希表key中的field的值
HMSET key field value [field value ...] # 批量设置键值对到一个key中
HMGET key field [field ...] # 批量获取key中多个field的值
HGETALL key # 获取key中所有的键值对
HINCRBY key field increment # 将key中的指定字段的value值加上增量increment
HDEL key field [field ...] # 批量删除哈希表key中的键值对
使用场景
# 对象缓存
hmset user 1:name zs 1:age 18
hmget user 1:name 1:age
1)"zs"
2)"18"
list
list按照元素的插入顺序排序,添加元素时可以选择添加在list的头部或者尾部,删除元素时可以选择在list的头部删除或者尾部删除,适用于消息流推送的场景。
常用命令
LPUSH key value [value ...] # 将一个或多个值插入到列表头部
RPUSH key value [value ...] # 将一个或多个值插入到列表尾部
LPOP key # 移出并获取列表的第一个元素
RPOP key # 移出并获取列表的最后一个元素
LLen key # 获取列表长度
LINDEX key index # 通过索引获取列表中的元素
LRANGE key start stop # 获取列表指定范围内的元素
使用场景
# 消息队列
lpush msg 1001 1002 1003 1004 1005 # 向msg队列中添加5条消息id
lrange msg 0 2 # 获取最新的3条消息
1) "1005"
2) "1004"
3) "1003"
set
set是无序集合,集合成员是唯一的,不能重复,支持集合的交、并、差操作,适用于点赞、收藏等场景。
常用命令
SADD key member [member ...] # 向集合key添加一个或多个元素
SCARD key # 获取集合key中的元素个数
SPOP key [count] # 删除并返回集合中的count个随机元素
SREM key member [member ...] # 删除集合key中一个或多个元素
SMEMBERS key # 获取集合key中所有元素
SISMEMBER key member # 判断member元素是否在于集合key中
SRANDMEMBER key [count] # 从集合key中选出count个元素,元素不从key中删除
SINTER key [key ...] # 返回指定集合的交集
SDIFF key [key ...] # 返回指定集合的差集
SUNION key [key ..] # 返回指定集合的并集
使用场景
# 点赞
sadd article1 1001 # 用户1001点赞了文章article1
sadd article2 1002 # 用户1002点赞了文章article2
srem article1 1002 # 用户1002取消点赞了文章article2
smembers article2 # 获取文章article2的点赞列表
scard article2 # 获取文章article2的点赞数量
sismember article2 1002 # 用户1002是否点赞了文章article2
zset
zset在set的基础上为每个元素添加了一个属性值score用于排序,其他性质与set相同,适用于排行榜的场景。
常用命令
ZADD key score member [[score member]…] # 向有序集合key添加一个或多个元素
ZCARD key # 获取有序集合key的元素个数
ZREM key member [member …] # 删除有序集合key中的一个或多个元素
ZSCORE key member # 获取有序集合key中指定元素的分数
ZRANK key member # 获取有序集合key中指定成员的排名
ZINCRBY key increment member # 为有序集合key中对指定成员的分数加上增量increment
ZRANGE key start stop [WITHSCORES] # 正序获取有序集合key中排序从start到stop区间的元素,并可选带上分值
ZREVRANGE key start stop [WITHSCORES] # 倒序获取有序集合key中排序从start到stop区间的元素,并可选带上分值
ZINTERSTORE destination numkeys key [key ...] # 计算给定的多个有序集的交集,并将结果集存储在新的有序集合key中
ZUNIONSTORE destination numkeys key [key ...] # 计算给定的多个有序集的并集,并将结果集存储在新的有序集合key中
使用场景
# 排行榜
zadd math 89 alice 75 bob 100 cindy 92 david # 添加学生数学成绩信息
zrevrange math 0 -1 withscores # 倒序学生的数学成绩排名
1) "cindy"
2) "100"
3) "david"
4) "92"
5) "alice"
6) "89"
7) "bob"
8) "75"