最新要闻
- 越狱最后各人物的结局是什么?电视剧越狱演员表
- 曾志伟的身高是什么?曾志伟个人资料
- 12月是什么星座?描写12月你好的优美说说
- 取关是什么意思?取关抖音好友对方知道吗?
- 期中考试家长意见怎么写?期中考试后的感想作文模板
- 热点评!19岁中国小伙确诊老年痴呆 全球纪录又被刷新了
- 全球看点:土耳其大地震 多家中国上市公司称影响有限
- ChatGPT教你写AI包教包会!7段对话写出识别程序 准确度最高达99.7%
- 每日资讯:小米Civi 2潮流限定版来了:后盖上全是粉色Hello Kitty 超萌
- 世界看热讯:国产ChatGPT何时能出?百度站出来了:最快3月 评分全球第一
- 7斤纯铜就能压制酷睿i9 为啥还要散热风扇?原因一个字:贵
- 新能源起大早赶晚集 吉利失去的四年
- 全球新消息丨魔兽等游戏国服已停服两周 暴雪高管:寻求替代方式服务中国玩家
- 全球热点评!法拉利2022年销量破纪录 员工年终奖人均10万
- 焦点信息:官方加紧备货!红魔8 Pro系列开售一个多月供不应求:网友反映“秒没”
- 全球要闻:2.5K触屏骁龙本!小米Book 12.4二合一首销:到手2899元
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
天天视讯!Redis的十六种应用场景
Redis 16 个常见使用场景
这个场景最开始是是一篇介绍微博Redis应用的PPT中看到的,其中提到微博的Redis主要是用在在计数和好友关系两方面上,当时对好友关系方面的用法不太了解,后来看到《Redis设计与实现》中介绍到作者最开始去使用Redis便是希望能通过。利用set结构的无序性,通过Spop(RedisSpop命令用于移除集合中的指定key的一个或多个随机元素,移除后会返回移除的元素。在Redis的数据结构中,在最
(资料图)
1. 缓存
作为Key-Value
形态的内存数据库,Redis 最先会被想到的应用场景便是作为数据缓存。而使用 Redis 缓存数据非常简单,只需要通过string
类型将序列化后的对象存起来即可,不过也有一些需要注意的地方:
必须保证不同对象的 key 不会重复,并且使 key 尽量短,一般使用类名(表名)加主键拼接而成。
选择一个优秀的序列化方式也很重要,目的是提高序列化的效率和减少内存占用。
缓存内容与数据库的一致性,这里一般有两种做法:
- 只在数据库查询后将对象放入缓存,如果对象发生了修改或删除操作,直接清除对应缓存(或设为过期)。
- 在数据库新增和查询后将对象放入缓存,修改后更新缓存,删除后清除对应缓存(或设为过期)。
2. 数据共享分布式
String 类型,因为 Redis 是分布式的独立服务,可以在多个应用之间共享
例如:分布式Session
org.springframework.session spring-session-data-redis
3、分布式锁
如今都是分布式的环境下java自带的单体锁已经不适用的。在 Redis 2.6.12 版本开始,string
的set
命令增加了一些参数:
EX
:设置键的过期时间(单位为秒)PX
:设置键的过期时间(单位为毫秒)NX
:只在键不存在时,才对键进行设置操作。SET key value NX
效果等同于SETNX key value
。XX
:只在键已经存在时,才对键进行设置操作。
由于这个操作是原子性的,可以简单地以此实现一个分布式的锁,例如:
set lock_key locked NX EX 1
如果这个操作返回false
,说明 key 的添加不成功,也就是当前有人在占用这把锁。而如果返回true
,则说明得了锁,便可以继续进行操作,并且在操作后通过del
命令释放掉锁。并且即使程序因为某些原因并没有释放锁,由于设置了过期时间,该锁也会在 1 秒后自动释放,不会影响到其他程序的运行。 推荐使用 redisson 第三方库实现分布式锁。 参考 java分布式锁终极解决方案之 redisson
4、全局ID
int类型,incrby,利用原子性
incrby userid 1000
分库分表的场景,一次性拿一段
5、计数器
int类型,incr方法
例如:文章的阅读量、微博点赞数、允许一定的延迟,先写入Redis再定时同步到数据库
计数功能应该是最适合 Redis 的使用场景之一了,因为它高频率读写的特征可以完全发挥 Redis 作为内存数据库的高效。在 Redis 的数据结构中,string
、hash
和sorted set
都提供了incr
方法用于原子性的自增操作,下面举例说明一下它们各自的使用场景:
- 如果应用需要显示每天的注册用户数,便可以使用
string
作为计数器,设定一个名为REGISTERED_COUNT_TODAY
的 key,并在初始化时给它设置一个到凌晨 0 点的过期时间,每当用户注册成功后便使用incr
命令使该 key 增长 1,同时当每天凌晨 0 点后,这个计数器都会因为 key 过期使值清零。 - 每条微博都有点赞数、评论数、转发数和浏览数四条属性,这时用
hash
进行计数会更好,将该计数器的 key 设为weibo:weibo_id
,hash
的 field 为like_number
、comment_number
、forward_number
和view_number
,在对应操作后通过hincrby
使hash 中
的 field 自增。 - 如果应用有一个发帖排行榜的功能,便选择
sorted set
吧,将集合的 key 设为POST_RANK
。当用户发帖后,使用zincrby
将该用户 id 的 score 增长 1。sorted set
会重新进行排序,用户所在排行榜的位置也就会得到实时的更新。
6、限流
int类型,incr方法
以访问者的ip和其他信息作为key,访问一次增加一次计数,超过次数则返回false
7、位统计
String类型的bitcount(1.6.6的bitmap数据结构介绍)
字符是以8位二进制存储的
set k1 asetbit k1 6 1setbit k1 7 0get k1 /* 6 7 代表的a的二进制位的修改a 对应的ASCII码是97,转换为二进制数据是01100001b 对应的ASCII码是98,转换为二进制数据是01100010因为bit非常节省空间(1 MB=8388608 bit),可以用来做大数据量的统计。*/
参考 使用Redis的bitmaps统计用户留存率、活跃用户
用户日活月活怎么统计 - Redis HyperLogLog 详解
8. 时间轴(Timeline)
list
作为双向链表,不光可以作为队列使用。如果将它用作栈便可以成为一个公用的时间轴。当用户发完微博后,都通过lpush
将它存放在一个 key 为LATEST_WEIBO
的list
中,之后便可以通过lrange
取出当前最新的微博。
9. 消息队列
Redis 中list
的数据结构实现是双向链表,所以可以非常便捷的应用于消息队列(生产者 / 消费者模型)。消息的生产者只需要通过lpush
将消息放入 list,消费者便可以通过rpop
取出该消息,并且可以保证消息的有序性。如果需要实现带有优先级的消息队列也可以选择sorted set
。而pub/sub
功能也可以用作发布者 / 订阅者模型的消息。无论使用何种方式,由于 Redis 拥有持久化功能,也不需要担心由于服务器故障导致消息丢失的情况。
List提供了两个阻塞的弹出操作:blpop/brpop,可以设置超时时间
- blpop:blpop key1 timeout 移除并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
- brpop:brpop key1 timeout 移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
上面的操作。其实就是java的阻塞队列。学习的东西越多。学习成本越低
- 队列:先进先除:rpush blpop,左头右尾,右边进入队列,左边出队列
- 栈:先进后出:rpush brpop
10、抽奖
利用set结构的无序性,通过 Spop( Redis Spop 命令用于移除集合中的指定 key 的一个或多个随机元素,移除后会返回移除的元素。 ) 随机获得值
redis> SADD myset "one"(integer) 1redis> SADD myset "two"(integer) 1redis> SADD myset "three"(integer) 1redis> SPOP myset"one"redis> SMEMBERS myset1) "three"2) "two"redis> SADD myset "four"(integer) 1redis> SADD myset "five"(integer) 1redis> SPOP myset 31) "five"2) "four"3) "two"redis> SMEMBERS myset1) "three"redis>
11、点赞、签到、打卡
假如上面的微博ID是t1001,用户ID是u3001
用 like:t1001 来维护 t1001 这条微博的所有点赞用户
- 点赞了这条微博:sadd like:t1001 u3001
- 取消点赞:srem like:t1001 u3001
- 是否点赞:sismember like:t1001 u3001
- 点赞的所有用户:smembers like:t1001
- 点赞数:scard like:t1001
是不是比数据库简单多了。
12 商品标签
老规矩,用 tags:i5001 来维护商品所有的标签。
- sadd tags:i5001 画面清晰细腻
- sadd tags:i5001 真彩清晰显示屏
- sadd tags:i5001 流程至极
13、好友关系、用户关注、推荐模型
这个场景最开始是是一篇介绍微博 Redis 应用的 PPT 中看到的,其中提到微博的 Redis 主要是用在在计数和好友关系两方面上,当时对好友关系方面的用法不太了解,后来看到《Redis 设计与实现》中介绍到作者最开始去使用 Redis 便是希望能通过set
解决传统数据库无法快速计算集合中交集这个功能。后来联想到微博当前的业务场景,确实能够以这种方式实现,所以姑且猜测一下:
对于一个用户 A,将它的关注和粉丝的用户 id 都存放在两个 set 中:
A:follow
:存放 A 所有关注的用户 idA:follower
:存放 A 所有粉丝的用户 id那么通过
sinter
命令便可以根据A:follow
和A:follower
的交集得到与 A 互相关注的用户。当 A 进入另一个用户 B 的主页后,A:follow
和B:follow
的交集便是 A 和 B 的共同专注,A:follow
和B:follower
的交集便是 A 关注的人也关注了 B。
举例
follow 关注 fans 粉丝
相互关注:
- sadd 1:follow 2
- sadd 2:fans 1
- sadd 1:fans 2
- sadd 2:follow 1
我关注的人也关注了他(取交集):
- sinter 1:follow 2:fans
可能认识的人:
- 用户1可能认识的人(差集):sdiff 2:follow 1:follow
- 用户2可能认识的人:sdiff 1:follow 2:follow
14 .排行榜
使用sorted set
(有序set)和一个计算热度的算法便可以轻松打造一个热度排行榜,zrevrangebyscore
可以得到以分数倒序排列的序列,zrank
可以得到一个成员在该排行榜的位置(是分数正序排列时的位置,如果要获取倒序排列时的位置需要用zcard
-zrank
)。
id 为6001 的新闻点击数加1:
zincrby hotNews:20190926 1 n6001
获取今天点击最多的15条:
zrevrange hotNews:20190926 0 15 withscores
15 .倒排索引
倒排索引是构造搜索功能的最常见方式,在 Redis 中也可以通过set
进行建立倒排索引,这里以简单的拼音 + 前缀搜索城市功能举例:
假设一个城市北京
,通过拼音词库将北京
转为beijing
,再通过前缀分词将这两个词分为若干个前缀索引,有:北
、北京
、b
、be
…beijin
和beijing
。将这些索引分别作为set
的 key(例如:index:北
)并存储北京
的 id,倒排索引便建立好了。接下来只需要在搜索时通过关键词取出对应的set
并得到其中的 id 即可。
16 .显示最新的项目列表
比如说,我们的一个Web应用想要列出用户贴出的最新20条评论。在最新的评论边上我们有一个“显示全部”的链接,点击后就可以获得更多的评论。
每次新评论发表时,我们会将它的ID添加到一个Redis列表。可以限定列表的长度为5000
LPUSH latest.comments
在Redis中我们的最新ID使用了常驻缓存,这是一直更新的。但是我们做了限制不能超过5000个ID,因此我们的获取ID函数会一直询问Redis。只有在超出了这个范围的时候,才需要去访问数据库。
-
全球短讯!一款备受欢迎的用户脚本管理器插件TampermonKey-油猴脚本管理器安装与使用
Tampermonkey简介Tampermonkey是一款备受欢迎的浏览器扩展和用户脚本管理器,它适用于目前各种主流浏览...
来源: 天天视讯!Redis的十六种应用场景
全球短讯!一款备受欢迎的用户脚本管理器插件TampermonKey-油猴脚本管理器安装与使用
越狱最后各人物的结局是什么?电视剧越狱演员表
曾志伟的身高是什么?曾志伟个人资料
12月是什么星座?描写12月你好的优美说说
取关是什么意思?取关抖音好友对方知道吗?
期中考试家长意见怎么写?期中考试后的感想作文模板
热点评!19岁中国小伙确诊老年痴呆 全球纪录又被刷新了
全球看点:土耳其大地震 多家中国上市公司称影响有限
ChatGPT教你写AI包教包会!7段对话写出识别程序 准确度最高达99.7%
每日资讯:小米Civi 2潮流限定版来了:后盖上全是粉色Hello Kitty 超萌
世界看热讯:国产ChatGPT何时能出?百度站出来了:最快3月 评分全球第一
[西湖论剑2022]Misc-机你太美
焦点资讯:抖音视频无水印下载器,抖音视频下载器,下载未开放下载权限的视频,支持批量下载,同一作者作品自动批量下载,合集下载,话题挑战视频合集下载等
世界快消息!【2023微博签到爬虫】用python爬上千条m端微博签到数据
带了一个 3 年的开发,不会循环删除 List 中的元素,心态崩了。。
环球通讯!DataX插件二次开发指南
7斤纯铜就能压制酷睿i9 为啥还要散热风扇?原因一个字:贵
新能源起大早赶晚集 吉利失去的四年
全球新消息丨魔兽等游戏国服已停服两周 暴雪高管:寻求替代方式服务中国玩家
全球热点评!法拉利2022年销量破纪录 员工年终奖人均10万
世界新动态:读Java实战(第二版)笔记03_引入和使用流
焦点快看:必知必会的设计原则——开放封闭原则
焦点信息:官方加紧备货!红魔8 Pro系列开售一个多月供不应求:网友反映“秒没”
全球要闻:2.5K触屏骁龙本!小米Book 12.4二合一首销:到手2899元
环球微动态丨2023年来最强雨雪上线:北方下雪、南方暴雨 影响超20省份
单踏板不爽、刹车失灵无妨!特斯拉83%车主为新用户 客户流失低忠诚度最高
【环球速看料】聊天机器人ChatGPT要抢搜索引擎生意 谷歌出手:竞品Bard来了
【天天新要闻】安卓之光来了!曝小米13 Ultra 4月登场:支持120倍变焦
天天时讯:售价超过2万元 苹果MR头显即将推出:搭载全新OS 未来将取代iPhone
【天天新视野】我国多地取消中考男女生长跑 800米对健康不利:专家喊话体育锻炼不能放松
关于pacemaker-Cluster-节点的维护模式的功能介绍
SpringBoot怎么自定义一个Starter
当前快报:做出《新闻联播》片头的齐东旭教授走了:中国CAD与计算机图形学痛失巨匠
环球观焦点:游客放孔明灯被拽下吹灭 景区回应:明文规定禁放禁售
【天天新视野】《分布式技术原理与算法解析》学习笔记Day03
Spring IOC官方文档学习笔记(九)之基于注解的容器配置
每个程序员必学的10个Git命令
打价格战底气十足:数据显示特斯拉单车利润是比亚迪6倍
梦回Win98!196MB内存电脑成功启动Win11:开机时间要30分钟
环球看热讯:node中的优先从缓存中加载模块与模块的加载规则
LeetCode 239 滑动窗口最大值- Python手撕最大堆
环球新资讯:vscode编译java程序出现NoSuchMethodError的解决方法
价格又卷下来了!致态TiPlus 7100固态硬盘新史低:1TB仅589元
【天天快播报】澳大利亚一架波音737灭火飞机坠毁:全员奇迹生还
[JavaScript]实例化对象
天天热消息:【ctf权威竞赛指南笔记】(1)CTF
环球聚焦:全国城市地级市区县sql
速递!官宣续航为什么跑不到?爱玛实测电动车续航最多缩水40%
地震威力巨大 土耳其世界文化遗产古堡地震中倒塌
快资讯丨拒绝妖魔化 硬件发烧友怒买N张矿卡实测:结果大受震撼
【世界聚看点】上海一男子骑电车被劳斯莱斯撞倒后笑出了声 网友:还是大城市机会多
世界速看:Intel中国特供版i5-13490F突然开卖:1599元性价比逆天
厦门海辰储能--内部推荐
全球动态:Obsidian 插件(二):Advanced_Slides 的使用
自制肥牛卷
【快播报】【持续更新中】开源贡献记录
全球即时:USACO 2023 January Contest, Bronze Problem 3. Moo Operations
每日简讯:还有五场!饿了么免单活动又来了 一文看懂免单攻略
环球快资讯丨官方:嫦娥六号将带回2000克月球样品、嫦娥八号集大成
一天2次!土耳其再发7.8级地震:强震群 形势严峻
焦点信息:微博发布春节档电影热度报告:山东、河南网友最爱《满江红》
观点:真超薄自适应贴合!冈本超薄避孕套20片到手39.9元
世界短讯!现代农业|AIRIOT智慧农业管理解决方案
天天百事通!Ansible的部署和命令模块
携手Hello Kitty:小米Civi 2情人节特别版明日亮相
【全球快播报】国外网友:不看好网飞版《三体》 感谢腾讯!
全球通讯!10块钱可测17次!奥德中科快速检测试剂盒大促:0.59元/份清仓
世界视点!《流浪地球》引力弹弓人类真的实现过!张朝阳在线手算木星之旅
热点评!2022欧洲最畅销车型榜:国人不爱买的法系车登顶
当前快看:记录--使用Lunchbox 在 vue3 中创建一个 3D 地球
环球看点!做一个“不那么差”的程序员,有多难?
自研国产客机梦碎 消息称日本终止SpaceJet飞机 曾比我国进展都快
每日播报!8999元 科大讯飞推出T20 Pro学习机:2.5K屏、12000mAh大电池
全球微资讯!又又又融资1.35亿美元!贾跃亭喊话:FF 91将交付 百万豪车你买吗?
5499元 爱玛指挥官2023两轮电动车发布:石墨烯电池 145km长续航
《零:月蚀的假面》数字豪华版服装公布:旗袍黑丝超吸睛
天天报道:【交互式用户流程与演示设计】上海道宁与Overflow让您能更自信的展示您的设计
Helm
2023年Java面试正确姿势(1000+面试题附答案解析)
天天最新:黄光裕频繁减持国美套现10亿 把控股股东席位“减”没了
小屏幕拜拜!新款比亚迪秦PLUS DM-i内饰官图:最大短板被补足
【焦点热闻】可装进口袋!大疆新品DJI Mini 2 SE无人机2月9日发布
【全球播资讯】抛弃ARM公版 高通纯自研CPU骁龙8cx Gen4曝光:12核3.4GHz性能怪兽
焦点热讯:林志颖车祸后首谈特斯拉:称自己还在开特斯拉 没有任何阴影
天天速看:统信 UOS 重置Root账号密码 获取 Root 权限
全球快资讯:Spring:声明式事务
每日热点:Docker-harbor私有仓库
世界动态:爱奇艺用户吐槽会员跳不过广告!客服称登陆设备太多 账号异常
快播:6人网订民宿遇坐地起价:店家称有20多人订此房间 谁加价谁住
环球今日讯!索尼PS5不香了!会员数量持续流失 微软迎头赶上
10大“刮油”食物 佳节必备 转给需要的朋友!
环球视点!《流浪地球2》太空电梯能实现吗?专家:实现难度极大
全球信息:【秒杀】NTP时钟同步让秒杀成毫秒微秒纳秒杀
全球热议:满血40Gbps USB4 铭凡锐龙7000 8核准系统2549元(液金散热)
中国用户立大功!库克称iPhone很多技术灵感来自中国
广汽菲克破产 4S店已无售后!官方:我们为车主兜底
研究称调整脑电波能加速成人学习速度:至少快3倍
吾爱破解 2023 春节解题领红包之 Web 题解
开源即时通讯IM框架 MobileIMSDK v6.3 发布