Redis 基础数据结构介绍和使用

0 阅读3分钟

Redis 基础数据结构介绍和使用


image.png

一、String(字符串)

help @String

image.png

1. 常见使用场景

(1) 单值缓存

SET key value
APPEND key value

(2) 对象缓存

SET object:1 '{"name":"aaa","age":"80"}'

# 或使用 Hash 模拟
MSET object:1:name aaa object:1:age 80
MGET object:1:name object:1:age

(3) 分布式锁

SETNX object:1 true

二、Hash(哈希)

help @hash

image.png

Hash 结构的优缺点

常用场景:(1)活动发奖一个活动多个奖品 (2)购物车,userKey shop 1

优点:

  1. 同类数据归类存储,方便管理
  2. 相比 String,消耗内存和 CPU 更少
  3. 相比 String,存储上占用空间也更少

缺点:

  1. 过期时间不能用在 field 上,只能用在 key 上
  2. 在集群架构上,整个集群共同分摊一万多个槽位,不适合大规模使用,可能 hash 到多台机器

三、List(列表)

help @list

image.png

常用组合

数据结构说明操作命令
Stack(栈)后进先出LPUSH + LPOP
Queue(队列)先进先出LPUSH + RPOP
Blocking MQ(阻塞队列)阻塞消费LPUSH + BRPOP

使用场景

  1. 吃饭排队,用队列结构一个个从右边弹出
  2. 签到列表,来一个 push 一个
  3. 简单的 MQ

缺点

  1. 一个 list 的容量是 2^32 - 1 个元素,注意大 key 出现
  2. list 底层是双向链表,操作两头数据性能很高,操作中间的元素性能较差

四、Set(集合)

help @set

image.png

应用场景

  1. 抽奖:参与则加入,已存在不做处理

    SMEMBERS key          # 查看参与人数
    SRANDMEMBER key       # 随机抽取中奖者
    
  2. 微信点赞、文章收藏

  3. 集合运算:抖音"可能认识的人"功能 —— 把你朋友的关注和你的关注做差集,推给你


五、ZSet(有序集合)

help @zset

image.png

常用场景:排行榜

# (1) 增加点击量
ZINCRBY weixistudy:20260101 1 人工智能

# (2) 展示当日点击量前 10
ZREVRANGE weixistudy:20260101 0 9 WITHSCORES

# (3) 展示 3 日内有哪些内容被访问
ZUNIONSTORE weixistudy:20260101-20260103 3 
    weixistudy:20260101 weixistudy:20260102 weixistudy:20260103

# (4) 展示 3 日访问前 10
ZREVRANGE weixistudy:20260101-20260103 0 9 WITHSCORES

六、Bitmap(位图)

help @bitmap

image.png

使用场景:日历签到

# 1 号用户第 100 天完成签到
SETBIT dailycheck:1 100 1

# 统计 1 号用户的签到次数
BITCOUNT dailycheck:1

# 统计 1 号用户第一次签到的时间(第一个 1 的位置)
BITPOS dailycheck:1 1

总结

数据结构底层实现典型使用场景
StringSDS 简单动态字符串缓存、计数器、分布式锁
Hashziplist / hashtable对象存储、购物车
Listquicklist(ziplist + 双向链表)消息队列、时间线
Setintset / hashtable去重、抽奖、社交关系
ZSetziplist / skiplist + hashtable排行榜、带权重队列
BitmapString(位操作)签到、用户标签、布隆过滤器