锦通 发表于 2024-8-29 18:35:59

Redis 的常见使用场景

01 缓存

 作为 Key-Value 形态的内存数据库,Redis 开始会被想到的应用场景便是作为数据缓存。而使用 Redis 缓存数据非常简单,只需要通过 string 类型将序列化后的对象存起来即可,不外也有一些需要注意的地方:
· 必须包管不同对象的 key 不会重复,而且使 key 只管短,一般使用类名(表名)加主键拼接而成。
· 选择一个精良的序列化方式也很重要,目的是提高序列化的效率和淘汰内存占用。
· 缓存内容与数据库的一致性,这里一般有两种做法:
1.只在数据库查询后将对象放入缓存,假如对象发生了修改或删除操作,直接清除对应缓存(或设为过期);
2.在数据库新增和查询后将对象放入缓存,修改后更新缓存,删除后清除对应缓存(或设为过期)。
02 数据共享分布式

因为 Redis 是分布式的独立服务,可以在多个应用之间共享。
比如:共享session
在开发后台的时候,需要使用session来生存用户信息,当我们后台服务器不止一台,而是扩展成多台的时候,则需要有个来存储共享session的地方,而redis可以实现session共享。
03 分布式锁

redis可以实现分布式锁,重要使用setnx这个api,假如存在则返回加锁失败,否则加锁成功,并可以设置过期时间。当程序实行完后,需要解锁。在解锁的时候,需要判断,解锁的线程与加锁的线程是同一个线程。以是判断与解锁需要是个原子操作。这个用到了lua脚本来实现。以是实现分布式锁重要有两点:
setnx,存在则加锁,否则返回失败;
使用lua脚本完成解锁操作。
04 消息队列

List是简单的字符串列表,可以从列表头部或尾部插入数据。使用的是压缩列表大概双向链表。常见命令是Left push ,Right pop,左进右出。
消息队列在存取消息时,必须要满足三个需求,分别是消息保序、处置处罚重复的消息和包管消息可靠性。
消息保序,list本身就是有顺序的,可以用LPush和RPop左推右出,实现顺序有序,值得注意的是,在一直没有消息进来的情况,使用pop命令一直访问List会浪费CPU资源,可以使用Redis提供了 BRPOP 命令。BRPOP命令也称为壅闭式读取,客户端在没有读到队列数据时,自动壅闭,直到有新的数据写入队列,再开始读取新数据。
处置处罚重复消息,redis 本身不会去控制存储数据的重复性,需要在客户端自行设计全局ID,消费者本身根据全局ID判断。
消息的可靠性,当消费者从List pop出一条消息,假如处置处罚过程中异常大概系统停机,则redis 上的list已经取出来了,不能再重新消费。为了留存消息,List 类型提供了 BRPOPLPUSH 命令,这个命令的作用是让消费者程序从一个 List 中读取消息,同时,Redis 会把这个消息再插入到另一个 List(可以叫作备份 List)留存。
消息保序:使用 LPUSH + RPOP;
壅闭读取:使用 BRPOP;
重复消息处置处罚:生产者自行实现全局唯一 ID;
消息的可靠性:使用 BRPOPLPUSH。
05 发红包

发红包需要确保在并发下,红包能只被一个人抢走。
做法:
将红包拆分成n份
使用redis list类型 存储红包,使用list 的pop 方法抢红包。
06 抽奖

Set 类型是一个无序并唯一的键值集合,它的存储顺序不会按照插入的先后顺序进行存储。Set 类型除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集。
存储某活动中中奖的用户名 ,Set 类型因为有去重功能,可以包管同一个用户不会中奖两次。
07 限流

int类型,incr方法
以访问者的ip和其他信息作为key,访问一次增长一次计数,超过次数则返回false。
08 计数器

int类型,incr方法
例如:文章的阅读量、微博点赞数、答应一定的延迟,先写入Redis再定时同步到数据库。
末了: 下方这份完备的软件测试视频学习教程已经整理上传完成,朋侪们假如需要可以自行免费领取【包管100%免费】
https://i-blog.csdnimg.cn/blog_migrate/93068acad188a6ffe668c0d82b1ce20c.png
这些资料,对于【软件测试】的朋侪来说应该是最全面最完备的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰巨的旅程,希望也能帮助到你!
https://i-blog.csdnimg.cn/blog_migrate/f5ad70248c270e457f08c1b73b425dd9.gif


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Redis 的常见使用场景