了解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 12 Redis
在K8s上部署Redis集群的方法步骤
Apr 27 Redis
基于Redis实现分布式锁的方法(lua脚本版)
May 12 Redis
SpringBoot 集成Redis 过程
Jun 02 Redis
浅谈Redis中的RDB快照
Jun 29 Redis
Redis主从配置和底层实现原理解析(实战记录)
Jun 30 Redis
Redis Cluster 集群搭建你会吗
Aug 04 Redis
Redisson实现Redis分布式锁的几种方式
Aug 07 Redis
CentOS8.4安装Redis6.2.6的详细过程
Nov 20 Redis
Redis如何使用乐观锁(CAS)保证数据一致性
Mar 25 Redis
Redis唯一ID生成器的实现
Jul 07 Redis
压缩Redis里的字符串大对象操作
你真的了解redis为什么要提供pipeline功能
Redis缓存-序列化对象存储乱码问题的解决
比较几种Redis集群方案
解析Redis Cluster原理
解析高可用Redis服务架构分析与搭建方案
Redis基于Bitmap实现用户签到功能
You might like
php关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
jQuery列表检索功能实现代码
2017/07/17 jQuery
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
ant design实现圈选功能
2019/12/17 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
Python中subprocess的简单使用示例
2015/07/28 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
美国厨房和园艺工具网上商店:Nestneed
2019/08/24 全球购物
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
企业负责人任命书
2014/06/05 职场文书
安全生产宣传标语
2014/06/06 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
写给医生的感谢信
2015/01/22 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
大学生读书笔记大全
2015/07/01 职场文书
人事任命书范本
2015/09/21 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书