【redis使用场景探究】

本文探讨了Redis在不同场景下的应用,包括核心数据结构对比,如Hash的优势与限制;微博与微信消息流利用Redis的LPUSH和LRANGE实现时间线;微信点赞、收藏与标签的实现;电商购物车的实现,以及潜在的电商推荐系统使用Redis的可能性。同时,提到了Redis在集群架构下的挑战和List作为MQ阻塞队列的角色。
摘要由CSDN通过智能技术生成

1.Redis核心数据结构比较
2.微博与微信消息流redis实现
3.微信点赞、收藏与标签基于redis实现
4.微博与微信朋友关注模型基于redis实现
5.电商购物车用redis实现


  • [ 待办 ] 电商购物车用redis实现
  • [ 待办 ] 电商推荐系统使用redis实现
  • [ 待办 ] redis高性能核心原理剖析

一 、Redis核心数据结构比较

hash优点:
1:同类数据归类整合储存,方便数据管理
2:相比string操作消耗内存与cpu更小
3:相比string储存更节省空间
hash缺点:
1:过期功能不能用在field上,只能用在key上
2:redis集群架构下不适合大规模使用 - 分片,将用户表的数据划分到不同的槽位


redis集群结构
redis集群结构


redis用以购物车

电商购物车
1)以用户id为key
2)商品id为field
3)商品数量为value

购物车操作
添加商品hset cart:1001 10088 1
增加数量hincrby cart:1001 10088 1
商品总数hlen cart:1001
删除商品hdel cart:1001 10088
获取购物车所有商品hgetall cart:1001

京东购物车


list使用场景:
1.栈:LPOP + LPUSH
2.队列:LPUSH + RPOP
3.MQ阻塞队列: LPUSH + BRPOP
数据结构:
数据结构
此外:

BLPOP  key  [key ...]  timeout	//从key列表表头弹出一个元素,若列表中没有元素,阻塞等待					timeout秒,如果timeout=0,一直阻塞等待
BRPOP  key  [key ...]  timeout 	//从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待					timeout秒,如果timeout=0,一直阻塞等待

set的操作

SADD set1 'a'
SADD set1 'b'
SADD set1 'c'

SADD set2 'b'
SADD set2 'c'
SADD set2 'd'

SADD set3 'c'
SADD set3 'd'
SADD set3 'e'

SINTER set1 set2 set3 -> { c }
SUNION set1 set2 set3 ->{ a,b,c,d,e }
SDIFF set1 set2 set3 -> { a } 
// 以第一个集合为基准 减去后面俩集合的并集 
// abc-bcde 只看第一个集合还剩下的元素 

set参与抽奖

微信抽奖小程序
1)点击参与抽奖加入集合
SADD key {userlD}
2)查看参与抽奖所有用户
SMEMBERS key	  
3)抽取count名中奖者
SRANDMEMBER key [count] / SPOP key [count]
 // key是活动id,抽奖的时候不改变
SRANDMEMBER key  // 看参与抽奖的人还有多少
SPOP key 3 // 先抽三个人
----------------------------
微信微博点赞,收藏,标签
1) 点赞
SADD like:{消息ID}  {用户ID}
SADD 10011001”
SADD 100110022) 取消点赞
SREM like:{消息ID}  {用户ID}
SREM 100110013) 检查用户是否点过赞
SISMEMBER like:{消息ID}  {用户ID}
SISMEMBER 1001 1001 
4) 获取点赞的用户列表
SMEMBERS like:{消息ID}
SMEMBERS 10011
-- 别的人进来就是共同好友
5) 获取点赞用户数 
SCARD like:{消息ID}
SCARD 1002
---------------------------
微博共同关注的人、共同好友、可能认识的人
1 我和老师的共同关注: 
SADD ddpSet p1
SADD ddpSet p2
SADD ddpSet p4
SADD teacherSet p1
SADD teacherSet p3
SADD p2Set p5
SADD p2Set p7
SADD p2Set teacher
SADD p4Set p6
SINTER ddpSet teacherSet--> {p1}
2 我关注的人也关注老师: // 分页
SISMEMBER p2Set teacher -- 展示teacher
SISMEMBER p4Set teacher -- 不展示teacher
3 我可能认识的人: 
SDIFF p2Set ddpSet ->(p1, p2 ,p4}
// p5p7-p1p2p4 = p5p7

二、微博与微信消息流redis实现

微博主页和微信公众号和朋友圈( 不是大v,订阅者2000到3000+先给在线的用户发送),订阅的微信公众号,后发的消息展示最前面,这都是带有时间线的消息流,用redis的LPUSH放数据+LRANGE取数据实现

LRANGE  key  start  stop // 返回key中指定区间内的元素,区间是偏移量start和stop指定的区间

如果大量的消息,pull模式,大v发消息到队列中去,其他用户上线之后,从队列中拉取
问题是用pull,本地要给消息再排序-新浪微博

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值