了解Redis常见应用场景


Posted in Redis onJune 23, 2021
目录
  • 一、String 场景
  • 二、Hash 场景
  • 三、List 场景
  • 四、Set 场景
  • 五、zSet 场景

 

一、String 场景

计数功能:

  • 例如掘金文章点击数量,阅读数量。
  • 集群环境下的session共享。

 

二、Hash 场景

各种 商城购物车 (淘宝,京东。。)

设计思路:

1.购物车绑定了 userId

2.商品id作为feild,商品数量作为value。

模拟过程:

// 初始化购物车数据

hmset userId:1 prod:1 1 prod:2 3 prod:3 4

 

// 增加商品 prod:1 购买数量为2件时

hincrby userId:1  prod:1 1

 

// 减少商品 prod:2 数量为1件时

hincrby userId:1 prod:2 -2

 

// 删除商品 prod:1 时

hdel userId:1 prod:1

 

// 统计商品数

hlen userId:1

 

三、List 场景

微信公众号订阅消息

设计思路:

公众号发布消息时,向订阅本公众号的用户(mess:1)推送(将订阅消息id通过lpush放入用户的list中),模拟过程。

模拟过程:

// 推送消息

lpush mess:1 999

lpush mess:1 1000

lpush mess:1 1010

 

// 查看消息,返回结果1010 1000 999

lrange mess:1 0 -1

 

四、Set 场景

限时抽奖活动:例如微信有个活动,活动id为2,如何基于Redis设计实现。

设计思路:

用户点击立即参与后,将用户id保存到活动id的集合中,利用Set集合的元素唯一性可查看参加用户、参加用户数量等等。

模拟过程:

// 用户user:1 user:2 user:3参加抽奖活动act:888

sadd act:888 user:1 user:2 user:3

 

// 模拟一次性随机抽奖1名

srandmember act:888

 

// 模拟两次抽奖,两次抽奖不重复,使用spop命令,抽取中的用户会从set中移除

spop act:888

spop act:888

好友关系:共同关注,我关注的人也关注了他,我可能认识的人

注: 如果数据量大的情况下使用大数据分析

设计思路:两个集合取交集

模拟过程:

// 三个用户关注的人

sadd user:1 zhangsan lisi wangwu

sadd user:2 zhangsan liliu wanger wangwu

sadd user:3 list wangwu liliu

 

// user:1和user:2共同关注的人,取交集,返回zhangsan wangwu

sinter user:1 user:2

 

五、zSet 场景

各种榜单:

例如百度新闻排名

设计思路:

将新闻id作为member,点击次数设置为score,每点击一次score+1,当然,为了每日榜单,member在设计时可以加上后缀用于日期区分,例如news:20191216、news:20191217 。

模拟过程:

// 增加热点新闻

zadd topic:20191216 100 new:1 200 new:2 150 new:3 500 new:4

 

// new:1点击了120次,点击数变为220

zincrby topic:20191216 120 new:1

 

// 查看今日排行前3名,返回 new:4 500 new:1 220 new:2 200

zrevrange topic:20191216 0 2 withscores

 

zadd topic:20191217 110 new:1 200 new:2 150 new:3 100 new:4

zadd topic:20191218 110 new:5 200 new:2 150 new:6 100 new:7

// 合并三日的数据

zunionstore topic:3day 3 topic:20191216 topic:20191217 topic:201912168

// 查看近三日排行榜前三名,返回new:4 600 new:2 600 new:1 330

zrevrange topic:3day 0 2 withscores

以上就是了解Redis常见应用场景的详细内容,更多关于Redis常见应用场景的资料请关注三水点靠木其它相关文章!

Redis 相关文章推荐
redis 限制内存使用大小的实现
May 08 Redis
Redis延迟队列和分布式延迟队列的简答实现
May 13 Redis
Redis集群的关闭与重启操作
Jul 07 Redis
Redis 彻底禁用RDB持久化操作
Jul 09 Redis
Redis Cluster集群动态扩容的实现
Jul 15 Redis
浅谈redis整数集为什么不能降级
Jul 25 Redis
Redis中一个String类型引发的惨案
Jul 25 Redis
Redis RDB技术底层原理详解
Sep 04 Redis
为什么RedisCluster设计成16384个槽
Sep 25 Redis
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
Feb 12 Redis
redis sentinel监控高可用集群实现的配置步骤
Apr 01 Redis
Redis实现主从复制方式(Master&Slave)
Jun 21 Redis
压缩Redis里的字符串大对象操作
你真的了解redis为什么要提供pipeline功能
Redis缓存-序列化对象存储乱码问题的解决
比较几种Redis集群方案
解析Redis Cluster原理
解析高可用Redis服务架构分析与搭建方案
Redis基于Bitmap实现用户签到功能
You might like
外媒评选出10支2020年最受欢迎的Dota2战队
2021/03/05 DOTA
PHP脚本的10个技巧(7)
2006/10/09 PHP
PHP5函数小全(分享)
2013/06/06 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
php调用shell的方法
2014/11/05 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
Nodejs多站点切换Htpps协议详解及简单实例
2017/02/23 NodeJs
Angular 2 利用Router事件和Title实现动态页面标题的方法
2017/08/23 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
详解ES6中的代理模式——Proxy
2018/01/08 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
Python中用Decorator来简化元编程的教程
2015/04/13 Python
python动态加载包的方法小结
2016/04/18 Python
Python返回数组/List长度的实例
2018/06/23 Python
python游戏地图最短路径求解
2019/01/16 Python
Python设计模式之建造者模式实例详解
2019/01/17 Python
python add_argument()用法解析
2020/01/29 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
python数据分析:关键字提取方式
2020/02/24 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
css3媒体查询中device-width和width的区别详解
2020/03/27 HTML / CSS
人民调解员先进事迹材料
2014/05/08 职场文书
三月学雷锋活动总结
2014/06/26 职场文书
运动会广播稿200字
2015/08/19 职场文书
Nginx配置根据url参数重定向
2022/04/11 Servers
Android开发手册自定义Switch开关按钮控件
2022/06/10 Java/Android