关于缓存雪崩,穿透,击穿的介绍及解决方案

2020-09-12  本文已影响0人  一丁点技术

关于缓存雪崩,穿透,击穿的介绍及解决方案

1.缓存雪崩

场景:同一时间大面积的redis key失效,导致所有的请求打到数据库上

解决办法:

原理:不要让redis key同时失效

2.缓存击穿

场景:在大量请求下,某热点key突然失效,导致所有请求都打到数据库上

解决办法:

3.缓存穿透

场景:恶意攻击者专门访问数据库中不存在的数据,导致穿过redis直接打到数据库上

如:id=-1的请求

解决办法:

附:

reids 常问面试题:

1.redis 是单线程还是多线程?

答:单线程

2.redis是单线程为什么那么快?

答:

3.什么事I/O多路复用机制?

1.jpg

用户首先将需要进行IO操作的socket添加到select中,然后阻塞等待select系统调用返回。当数据到达时,socket被激活,select函数返回。用户线程正式发起read请求,读取数据并继续执行。这样用户可以注册多个socket,然后不断地调用select读取被激活的socket,redis服务端将这些socke置于队列中,然后,文件事件分派器,依次去队列中取,转发到不同的事件处理器中,提高读取效率。

采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作,从而提高效率。

来源地址:https://www.php.cn/redis/424900.html 来源:php中文网(www.php.cn)

上一篇下一篇

猜你喜欢

热点阅读