了解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 13 Redis
redis实现排行榜功能
May 24 Redis
详解Redis基本命令与使用场景
Jun 01 Redis
解析Redis Cluster原理
Jun 21 Redis
比较几种Redis集群方案
Jun 21 Redis
redis客户端实现高可用读写分离的方式详解
Jul 04 Redis
Redis 持久化 RDB 与 AOF的执行过程
Nov 07 Redis
Springboot/Springcloud项目集成redis进行存取的过程解析
Dec 04 Redis
Redis中缓存穿透/击穿/雪崩问题和解决方法
Dec 04 Redis
聊聊redis-dump工具安装问题
Jan 18 Redis
使用Redis做预定库存缓存功能
Apr 02 Redis
Redis基本数据类型Set常用操作命令
Jun 01 Redis
压缩Redis里的字符串大对象操作
你真的了解redis为什么要提供pipeline功能
Redis缓存-序列化对象存储乱码问题的解决
比较几种Redis集群方案
解析Redis Cluster原理
解析高可用Redis服务架构分析与搭建方案
Redis基于Bitmap实现用户签到功能
You might like
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
php对数组排序的简单实例
2013/12/25 PHP
php截取字符串函数分享
2015/02/02 PHP
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
解决Python一行输出不显示的问题
2018/12/03 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
python 常见的排序算法实现汇总
2020/08/21 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
带薪年假请假条
2014/02/04 职场文书
铁路工务反思材料
2014/02/07 职场文书
《狮子和兔子》教学反思
2014/03/02 职场文书
安全生产目标责任书
2014/04/14 职场文书
门店业绩提升方案
2014/06/08 职场文书
商超业务员岗位职责
2015/02/13 职场文书
孙振耀退休感言
2015/08/01 职场文书
《颐和园》教学反思
2016/02/19 职场文书
Python基础之条件语句详解
2021/06/16 Python
sql字段解析器的实现示例
2021/06/23 SQL Server