了解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安装启动及常见数据类型
Apr 14 Redis
详解Redis实现限流的三种方式
Apr 27 Redis
Redis延迟队列和分布式延迟队列的简答实现
May 13 Redis
redis实现排行榜功能
May 24 Redis
redis实现的四种常见限流策略
Jun 18 Redis
Redis缓存-序列化对象存储乱码问题的解决
Jun 21 Redis
redis cluster支持pipeline的实现思路
Jun 23 Redis
linux下安装redis图文详细步骤
Dec 04 Redis
聊聊redis-dump工具安装问题
Jan 18 Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
Apr 01 Redis
Redis keys命令的具体使用
Jun 05 Redis
Redis实现短信验证码登录的示例代码
Jun 14 Redis
压缩Redis里的字符串大对象操作
你真的了解redis为什么要提供pipeline功能
Redis缓存-序列化对象存储乱码问题的解决
比较几种Redis集群方案
解析Redis Cluster原理
解析高可用Redis服务架构分析与搭建方案
Redis基于Bitmap实现用户签到功能
You might like
PHP 日志缩略名的创建函数代码
2010/05/26 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
2014/03/13 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
2017/04/25 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
ext 代码生成器
2009/08/07 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
javascript创建和存储cookie示例
2014/01/07 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
js导出excel文件的简洁方法(推荐)
2016/11/02 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
Javascript的this详解
2019/03/23 Javascript
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
python打印异常信息的两种实现方式
2019/12/24 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
浅析Python的命名空间与作用域
2020/11/25 Python
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
斯福泰克软件测试面试题
2015/02/16 面试题
房地产管理毕业生自荐信
2013/11/04 职场文书
面试后的英文感谢信
2014/02/01 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
会计专业求职信
2014/08/10 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
2015年服务员工作总结
2015/04/08 职场文书
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
2022/04/08 Python