Redis常见应用场景

8次阅读

共计 1482 个字符,预计需要花费 4 分钟才能阅读完成。

String 存储

  1. 点击计数功能,incr key:001 自增, 如链接点击数.
  2. 分布式锁 set key value nx px 1000// 通过 setnx 设置随机值并设置失效时间, 写值成功既加锁成功。
  3. 集群环境的 session 共享

List 存储

常应用于队列,栈, 可根据下标索引查找或范围内查询。
微信公众号订阅消息列表:
小明 useId:001 关注了阿里巴巴招聘和腾讯招聘公众号,
1. 阿里巴巴先发了一条推送 001:lpush userId:001:gongzhonghao 001
2. 腾讯再发了一条推送 002:lpush userId:001:gongzhonghao 002;
显示最新订阅消息三条:lrange userId:001:gongzhonghao 0 2


Hash 存储

购物车的设计

1. 展示所有的购物车商品
2. 购物车的商品总数
3. 增加和减少商品的数量
4. 移除商品
5. 结算价格 – 通过页面参数可直接计算

加入购物车:hmset user01:cart001 goods1Id 1 goods2Id 2
展示即获取 hash 所有商品和数量:hgetall user01:cart001


Set 存储

一: 小程序有个抽奖活动, 活动 id 为 0001,基于 redis 怎么实现抽奖?

比如 4 个人参加抽奖。
1. 把 userId 加入 set:sadd act:0001 001 002 003 004;
2. 查看抽奖用户有哪些:smembers act:0001
3. 随机抽奖 2 个人:srandmember act:0001 返回 2 个 id; 若中奖过的需要排除掉 spop act:0001 2, 表示随机抽取两个并从集合移除。
备注:有些版本不支持 spop act:0001 count 这种命令。


二: 微博点赞 or 朋友圈点赞怎么设计?
易建联发布了一个微博 weibo:001,
1. 粉丝 A 点赞:sadd weibo:001 fensiA
2. 查看用户 B 是否点赞过:sismember weibo:001 yonghuB, 是返回 1, 否则 0。
3. 粉丝 A 取消点赞:srem weibo:001 fensiA–rem 即 remove
4. 查看此条微博点赞的用户列表:smembers weibo:001
5. 查看点赞总数:scard weibo:001


三. 微博的微关系如何设计?共同关注?我关注的人也关注他?
1. 我关注的人有这些:sadd meCare kobe yijianlian james
2.james 关注的人有这些:sadd jamesCare kobe yijianlian yaoming
3.yaoming 关注的人:sadd yaomingCare james curry rose
4.jemes 和我 me 共同关注的人即交集:sinter meCare yaomingCare-> 返回 james, intersection 即交集.
5. 我关注的人也关注他(kobe), 我关注的人 james 也关注了 kobe,
sismember meCare kobe–sismember jamesCare kobe
6. 我可能认识的人
sdiff meCare yaomingCare // 计算差集


zset 有序集合

常用于排行榜,新闻话题榜等等。
百度页面的搜索热点设计实现,以日期为 key

1. 点击热点链接点击量 +1,zincrby hot:20191026 1 庆阳发现大油田

2. 排行榜实现,zrevrange hot:20191026 0 7 withscore – 返回有序集合指定区间 0 - 7 内的成员,通过索引,分数从高到低
3. 展示近 3 日的排行榜前八名
zrevrange hot:20191024-hot:20191026 0 7 withscore。
还有其他命令的应用可自行查询~~

正文完
 0