了解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 相关文章推荐
在K8s上部署Redis集群的方法步骤
Apr 27 Redis
基于Redis延迟队列的实现代码
May 13 Redis
浅谈Redis的几个过期策略
May 27 Redis
redis cluster支持pipeline的实现思路
Jun 23 Redis
Redis做数据持久化的解决方案及底层原理
Jul 15 Redis
解析redis hash应用场景和常用命令
Aug 04 Redis
为什么RedisCluster设计成16384个槽
Sep 25 Redis
Redis三种集群模式详解
Oct 05 Redis
详解redis在微服务领域的贡献
Oct 16 Redis
CentOS8.4安装Redis6.2.6的详细过程
Nov 20 Redis
redis数据结构之压缩列表
Mar 21 Redis
Redis过期数据是否会被立马删除
Jul 23 Redis
压缩Redis里的字符串大对象操作
你真的了解redis为什么要提供pipeline功能
Redis缓存-序列化对象存储乱码问题的解决
比较几种Redis集群方案
解析Redis Cluster原理
解析高可用Redis服务架构分析与搭建方案
Redis基于Bitmap实现用户签到功能
You might like
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
PHP实现简单日历类编写
2020/08/28 PHP
showModalDialog 和 showModelessDialog
2007/01/22 Javascript
网上应用的一个不错common.js脚本
2007/08/08 Javascript
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
JS实现加载时锁定HTML页面元素的方法
2017/06/24 Javascript
仿京东快报向上滚动的实例
2017/12/13 Javascript
javaScript强制保留两位小数的输入数校验和小数保留问题
2018/05/09 Javascript
jQuery实现容器间的元素拖拽功能
2020/12/01 jQuery
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
Python探索之创建二叉树
2017/10/25 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
Django异步任务线程池实现原理
2019/12/17 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
python如何绘制疫情图
2020/09/16 Python
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
保安员岗位职责
2013/11/17 职场文书
合同协议书格式
2014/04/18 职场文书
环保倡议书300字
2014/05/15 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
婚姻出轨保证书
2015/05/08 职场文书
关于开学的感想
2015/08/10 职场文书