Redis学习笔记(附一)热门问题

97 阅读2分钟

热门问题

缓存击穿透、击穿和雪崩

缓存雪崩是指Redis中缓存中的大量数据在同一时刻过期,此时若有大量请求打到Redis上来,这些请求都会落到数据库,MySQL的QPS基本在1000左右,几千甚至上万的QPS数据请求过来,数据库DBA会无法处理这大量请求,就会造成缓存雪崩。

(1)批量存入Redis数据时,过期时间设置随机值,就不会出现数据在同一时间大面积失效。

(2)设置热点数据永不过期,定时更新Redis缓存。

image.png

缓存击穿是和缓存雪崩的过程相似,不同的是缓存击穿是针对某一个热点Key,这个热点Key承受着很大的并发访问量。在这个热点Key失效的瞬间,大量请求击穿到数据库,会给数据库造成很大压力。

(1)设置热点数据永不过期

(2)加上互斥锁??

缓存穿透是指Redis缓存和数据库中都没有数据,而用户不断地发起请求。如发起为id值为 -1 的数据或 id 为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大,严重会击垮数据库。

(1)对于缓存击穿,要做传入参数的校验和拦截。

(2)同时可以在网关层nginx配置每个ip每秒访问次数。

(3)布隆过滤器Bloom Filter,原理也很简单就是利用高效的数据结构和算法快速判断出你这个Key是否在数据库中存在,不存在你return就好了,存在你就去查了DB刷新KV再return。

image.png

Redis大Key

help.aliyun.com/document_de…

image.png

image.png