美文网首页
(Redis篇-3)- Redis常用数据结构与应用场景

(Redis篇-3)- Redis常用数据结构与应用场景

作者: Burlong | 来源:发表于2021-09-10 09:14 被阅读0次

最常用的五种数据结构为:String、Hash、Set、List、Zset(Sorted Set)

另外还有几种特殊的数据结构:Bitmap、HyperLogLog、Bloom、GeoHash

String

最常用,用来做普通的get、set的KV操作。

Hash

类似HashMap的一种数据结构。

用处:

  • 存储结构化的数据,例如存储用户的登录态数据。

List

列表 - 双向链表实现。

用处:

  • 实现一些简单的消息队列:lpush/rpush和rpop/lpop写入和读取消息、brpop/blpop来实现阻塞队列。
  • 或者用来存储一些像粉丝列表、文章评论列表等热点数据。除此之外,其独特的lrange命令(返回指定区间的元素)还可以实现分页功能,并且性能很好。

Set

无序集合。

用处

  • 一般用来对一维的数据做去重
  • 另外一种适用场景就是用来求交集、并集、差集:比如计算两人的好友交集(共同好友)、差集(可能认识的好友)。
// 你的好友列表abcd
sadd you a b c d
// 我的好友列表cdef
sadd me c d e f
// 基于"你"来求和"我"之间的差集
sdiff you me
结果:a b
即可实现把你的好友a、b推荐给我

Sorted Set

有序集合。

用处:

  • 排行榜
  • 延迟队列(需要消费端定时轮询)
// 订单限时支付(score为当前时间+30min)
zadd delay_q now+30min task:orderId
// 消费端定时轮询队列delay_q(通过score排名:0开始排名到当前时间)
zrangebyscore delay_q 0 now
  • 限速器

Bitmap

位图。底层实际上也是String。

用处:

  • 是否参与过某次活动、是否已读某篇文章。。。
// 标志用户001参加过活动0001
setbit 0001 001 1
// 判断是否参加过活动
getbit 0001 001
  • 日活量统计
// 日期0605作为key,将一个个用户id映射的bit置1
setbit login:0605 001 1
setbit login:0605 002 1
setbit login:0605 003 1
...
// 直接统计该key为1的数量
bitcount login:0605
  • 统计连续登录

在统计日活量的基础上,对不同日期的bitmap做一个与运算。比如一个用户连续登录两天,那他id所映射到的那个bit,与运算的结果肯定为1。

相关文章

网友评论

      本文标题:(Redis篇-3)- Redis常用数据结构与应用场景

      本文链接:https://www.haomeiwen.com/subject/spdiwltx.html