Redis之数据结构详解

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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值