redis核心数据结构
2023-07-03 12:09:25 12 举报
AI智能生成
登录查看完整内容
redis的核心数据结构解析以及使用场景
作者其他创作
大纲/内容
SET key value
GET key
单值缓存
SET user:1 value(json数据格式)
优点:适用频繁修改用户某个属性
MSET user:1:name zqh user:1:age 30
MGET user:1:name user:1:age
对象缓存
第一次返回1表示获取锁成功
SETNX product:10001 true
再次获取锁则失败,返回0
释放锁
DEL product:10001
设置超时时间,防止死锁
SET product:10001 true ex 10 nx
分布式锁
用来记录首页新闻的浏览量
INCR new:readCount:{新闻id}
GET new:readCount:{新闻id}
计数器
spring session+redis实现session共享
Web集群session共享
可以批量生成序列号提升性能
INCRBY orderId 1000
分布式系统全局序列号
String
缓存用户信息
HMSET user {userId}:name xxx {userId}:age xxx
id为1的用户,name为zqh,age为30
示例:HMSET user 1:name zqh 1:age 30
获取userId为1的用户信息
HMGET user 1:name 1:age
设计:以用户的id为key ,商品的id为field,商品的数量为value
用户id为1001的用户在购物车中添加了商品id为10088的产品
HSET cart:1001 10088 1
用户1001增加了购物车中商品10088的数量
HINCRBY cart:1001 10088 1
用户1001购物车中的商品数量
HLEN cart:1001
用户1001删除了购物车中的商品10088
HDEL cart:1001 10088
获取用户1001购物车中所有商品
HGETALL cart:1001
电商购物车
同类数据归类整合存储,方便数据管理
相比string操作消耗cpu和内存更小
相比string存储更节省空间
优点
过期功能不能用在field上,只能用在key上
根据key进行hash分配不平均
redis集群架构下不适合大规模使用
缺点
Hash
后进先出,从左边进,从左边取
Stack(栈) = LPUSH +LPOP
先进先出,从左边进,从右边出
Queue(队列) = LPUSH + LPOP
Blocking MQ(阻塞队列) = LPUSH + BRPOP
实现常用数据结构
场景:我在公众号关注了MacTalk,备胎说车等
MacTalk发文章,消息ID为10001,往我的消息队列推送
备胎说车发文章,消息ID为10002,往我的消息队列推送
LPUSH msg:{我的id} 10001
LPUSH msg:{我的id} 10002
查看我收到最新的5条订阅号消息
LRANGE msg:{我的id} 0 4
粉丝太多的大V,可以先给在线的用户发
pull模式,大V只发一份,上线的用户去pull消息
业务优化:
微博和微信公众号消息流
List
点击参与id为1002的抽奖
SADD 1002 {userId}
查看参与1002抽奖的所有用户
SMEMBERS 1002
抽取{count}名中奖者
SRANDMEMBER key count命令,不会删除Set中元素,适合一次性抽奖
SPOP key count 命令是抽取出,会删除Set中元素,适合多次抽奖,一等奖,二等奖,三等奖
SRANDMEMBER KEY [count]/SPOP key [count]
微信抽奖小程序
表示一个微博所有的点赞用户
SADD like:{消息id} {用户id}
用户取消点赞
SREM like:{消息id} {用户id}
判断用户是否点赞
SISMEMBER like:{消息id} {用户id}
获取所有点赞该消息的用户信息
SMEMBER like:{消息id}
获取点赞用户数
SCARD like:{消息id}
微博点赞,收藏
取交集
SINTER set1 set2
取并集
SUNION set1 set2
font color=\"#e74f4c\
SDIFF set1 set2 set3
101关注了102和103
101Set ->{102,103}
业务场景
取101和104的交集可以得到101和104 的font color=\"#e74f4c\
SINTER 101Set 104Set
获取102关注的所有人,得到我关注的人也关注他
SMEMBER 102Set
去两个集合的差集{105},获取101可能认识的人
SDIFF 104Set 101Set
微博微信关注模型
业务场景:在电商平台根据品牌,操作系统,CPU,分辨率,内存等属性筛选想要的手机
设置华为品牌的手机集合为P40,Mate40
SADD font color=\"#e74f4c\
设置小米品牌的手机集合为mi10
SADD brand:xiaomi mi10
设置cpu品牌为intel的手机集合为P40,Mate40,mi10
SADDfont color=\"#e74f4c\
取交集可以实现筛选操作系统为安卓,cpu品牌为intel,内存大小为8G的手机
SINTER font color=\"#e74f4c\
电商筛选功能实现
集合操作
Set
每当有用户点击守护香港这条热搜,score+1
ZINCRBY hotNews:20190819 1 守护香港
获取当日的热搜前十
ZREVRANGE hotNews:20190819 0 9 WITHSCORES
计算一周的热搜
ZUNIONSTORE hotNews:20190813-19 7 hotNews:20190813 ... hotNews:20190819
获取一周热搜前十
ZREVRANGE hotNews:20190813-19 0 9 WITHSCORES
实现热搜排行榜功能
Zset
redis核心数据结构
0 条评论
回复 删除
下一页