Redis常见挑战汇总        跟着大宇学Redis--------目录帖

网友投稿 561 2022-11-16

Redis常见挑战汇总        跟着大宇学Redis--------目录帖

Redis常见挑战汇总        跟着大宇学Redis--------目录帖

前言

朋友所在的公司的系统Redis集群服务器十分庞大,据说光Redis服务器就配置了2500余台,并发量十分非常大。上次去他那里玩,聊到技术的时候,餐桌上他对我们分享很多有用的关于Redis缓存中间件的经验。

Redis在同一时刻出现大量缓存过期(缓存雪崩挑战)

大量缓存在同一时刻过期,并且有大量的请求直接发送到数据库上,其本质上就是缓存雪崩。

很多缓存数据都是由定时任务刷出来的,所有它们的失效时间都很集中。如果正好在失效的时候出现大量的请求,这些请求就直接打在数据库上了,数据库可能会压力骤增而宕机。解决办法有两个,在批量加入缓存数据的时候,为失效时间加入一个随机值。另外就是RateLimiter等组件来限流,防止短时间出现大量的请求进入系统。

刻意练习:大量缓存在同一时刻失效如何处理?

Redis实现分布式锁(不扣工资挑战)

在分布式项目中,做过定时任务的同学都会知道,多个节点也就是多个JVM进程,在同一时刻相同的定时任务会同时执行。其实我们只希望某个节点的定时任务执行。

主流的实现思路就是

(1)执行定时任务之前,向Redis中插入一组键值对。这个键就是分布式锁。这个值是只有当前节点知道的随机值。

(2)为了防止死锁,这组键值对需要设定过期时间。

(3)在释放锁的时候,需要判断去Redis里面查一下键对应的值,看看是否是当前节点生成的随机数,防止锁过期后释放了其它定时任务节点生成的分布式锁。

实战:​​第十八节 Redis实现分布式锁​​

刻意练习:Redis实现分布式锁的三要点

Redis生产库宕机挑战

RDB与AOF处理。RDB速度快,不会阻塞Redis主进程。AOF优势在于能够接近实时保存,把备份的频率控制在一秒一次。最多损失一秒内的缓存,但是AOF方式可能会产生比较大的缓存文件,所以要定期的使用AOF重写。在重写过程中,其他进程可能会对 Redis进行修改,所以AOF会有一个缓冲区用来修正AOF文件。

刻意练习:Redis怎么容灾

大数据量情况下寻找指定类型的Key

数据量小的情况下可以使用keys,为什么要数据量小呢?因为数据量大的话,keys命令可能会阻塞生产环境,造成卡顿。

scans命令可以不阻塞的取出指定正则的数据,但是速度要满一点,而且可能会有重复的数据,需要去除重复。而且还能够取出指定数据量的key。

刻意练习:大数据量如何找到指定格式开头的所有Key

消息队列的挑战

基于Redis的List这种数据类型,完全可以做消息队列。Lpush左近,Rpop右出。延时通过客户端的sleep方法控制。

另外一种通过BRpop命令,用阻塞的方式来获取,可以避免频繁使用定时任务去监听队列。

之前我用过Redisson实现过延时队列。本质上就是为每个key设置了过期时间,然后创建一个过期事件来监听这些Key。在过期事件的-里面来消费这些数据。

可以参考:​​分布式集合之映射缓存(MapCache)​​​          ​​List作为消息中间件​​​       ​​Redis监听Key失效​​

刻意练习:Redis是怎么做消息队列的?

Redis的五种数据类型

Key,List,Set,ZSet(SortedSet),Hash

本质上是二进制。Key代表一个Key对应一个Value,List代表一个Key对应多个Value。

Key:分布式锁

List:消息队列

Set:随机验证码,从Set集合中无需的取

ZSet:排行榜

Hash:缓存字典表

刻意练习:Redis常见数据结构及其应用场景

Reids哨兵模式

手动把从节点转成主节点,会导致该主节点一段时间内不能用。实际上是使用多个哨兵来解决。一个哨兵认为主节点宕机,是主观下线,而多个哨兵投票认为主节点不可用,是客观下线。然后会通知其他的从节点切换监测的主节点。

刻意练习:哨兵模式解决的问题是什么?主管下线与客观下线是什么?

Redis集群下多个节点之间数据共享的

集群的每个主节点用哈希槽来存放数据,且每个主节点只会维护一部分数据槽。客户端会计算请求的Key在哪个哈希槽里面,从而确定这个Key对应的值在哪个主节点上。

刻意练习:Redis集群如何保证多节点数据共享

Redis很快

Redis单线程,没有上线文切换的耗时。

Redis基于内存,操作内存的速度会比磁盘快。

另外就是即使操作磁盘IO,也是基于IO多路复用的,即一个进程监听多个IO事件。(select轮询 + epoll事件驱动)

刻意练习:Redis为什么很快

为什么用Redis(优点)

速度。容灾。集群。数据类型丰富。

刻意练习:为什么用Redis

Redis是怎么持久化(容灾)的

RDB用bgsave来保存当前的缓存数据到dump.rdb的文件中。bgsave会创建一个子进程取做备份操作,不会阻塞主进程。缺点会丢失一部分时间的缓存。AOF速度要慢一点,但是它优先于RDB。它能够配置1秒缓存一次,所以可以做到最多损失1秒的缓存。缺点是AOF文件会很大。

刻意练习:Redis宕机我该怎么办,辞职么?

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用BufferedReader读取TXT文件中数值,并输出最大值
下一篇:JDK1.8 stream流再会
相关文章

 发表评论

暂时没有评论,来抢沙发吧~