缓存中存在的三个问题及相关图解(图示解决方式) redis


正常的缓存,查到返回,查不到就null的,而没有缓存key,持续大量请求,都查询到数据库了。
这个也类似网页端的DDOS攻击

时间太久远差点记不起来了。

类似这样的攻击,都与缓存中第一个问题还是有相似之处,因为都是恶意人为的攻击。

缓存穿透
(根据某个key查不到缓存的数据,用户不会一直请求,额外情况是也许不是恶意的,比如taobao的秒杀活动和其它优惠限时限量活动,12306的抢票,用户还是需要刷网页或者刷某个接口的)

第一种缓存问题 缓存穿透的解决方式

TTL:

当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。

注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。

redis> FLUSHDB
OK

redis> TTL key
(integer) -2


# key 存在,但没有设置剩余生存时间

redis> SET key value
OK

redis> TTL key
(integer) -1


# 有剩余生存时间的 key

redis> EXPIRE key 10086
(integer) 1

redis> TTL key
(integer) 10084

ps:话说有些教程网站上的编辑啊真不用心

推荐的redis教程还是cn官方好 https://www.redis.net.cn/

缓存的第二个问题
缓存雪崩

缓存雪崩的问题就是说很多TTL设定的规格一致,失效时都失效,造成数据库的大面积压力
解决方式是错开TTL设定的时长

3
缓存击穿

缓存击穿是说,这个key有,但是一旦过期失效时,特大量请求贯穿而入,导致数据库的压力
“在一张薄膜纸上凿出了一个洞🕳️”
解决方式:设定这个热点的key 不过期

posted @ 2021-12-30 11:18  ukyo--君君小时候  阅读(126)  评论(0编辑  收藏  举报