了解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 26 Redis
浅谈Redis的几个过期策略
May 27 Redis
Redis基于Bitmap实现用户签到功能
Jun 20 Redis
Redis集群新增、删除节点以及动态增加内存的方法
Sep 04 Redis
SpringBoot整合Redis入门之缓存数据的方法
Nov 17 Redis
Redis命令处理过程源码解析
Feb 12 Redis
Redis 操作多个数据库的配置的方法实现
Mar 23 Redis
Redis如何使用乐观锁(CAS)保证数据一致性
Mar 25 Redis
redis sentinel监控高可用集群实现的配置步骤
Apr 01 Redis
Redis Lua脚本实现ip限流示例
Jul 15 Redis
Redis配置外网可访问(redis远程连接不上)的方法
Dec 24 Redis
压缩Redis里的字符串大对象操作
你真的了解redis为什么要提供pipeline功能
Redis缓存-序列化对象存储乱码问题的解决
比较几种Redis集群方案
解析Redis Cluster原理
解析高可用Redis服务架构分析与搭建方案
Redis基于Bitmap实现用户签到功能
You might like
在php中使用sockets:从新闻组中获取文章
2006/10/09 PHP
PHP新手上路(四)
2006/10/09 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
PHP实现的多进程控制demo示例
2019/07/22 PHP
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
深入分析js中的constructor和prototype
2012/04/07 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
详解JavaScript中精度失准问题及解决方法
2020/02/04 Javascript
在Docker上开始部署Python应用的教程
2015/04/17 Python
Python类属性与实例属性用法分析
2015/05/09 Python
Python内建模块struct实例详解
2018/02/02 Python
python requests 测试代理ip是否生效
2018/07/25 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
python实现超市商品销售管理系统
2019/11/22 Python
Pycharm小白级简单使用教程
2020/01/08 Python
python实现密码强度校验
2020/03/18 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
2020/05/22 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
护理不良事件检讨书
2014/02/06 职场文书
标准版离职证明书
2014/09/12 职场文书
餐厅感恩节活动策划方案
2014/10/11 职场文书
关于运动会的广播稿
2015/08/19 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
python 中的@运算符使用
2021/05/26 Python
python中的random模块和相关函数详解
2022/04/22 Python
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL