Redis:01缓存穿透和缓存雪崩及解决方案


Redis:01缓存穿透和缓存雪崩及解决方案

redis


目录:

1、概念

2、解决方案

3、代码案例

一、概念

1.1 缓存穿透(恶意请求):key对应的数据在数据库不存在,每次针对key的请求从缓存获取不到数据,从数据源也取不到数据(每次都要查询数据库,缓存形同虚设)。如:Redis缓存中没有uid=10000的用户信息,DB数据库中也没有。

1.2 缓存击穿(key失效):redis中有对应key和数据,当key过期时,此时有大量请求过来,请求发现缓存中没有数据,会从数据库中加载数据并set到缓存中,从而压垮数据源(数据库)。

1.3 缓存雪崩(服务重启/大量key失效):redis在一段时间内大量key失效。此时有大量请求,使请求直接命中数据库,导致数据库连接异常。

二、解决方案:

2.1 缓存穿透方案

布隆过滤 即在查询之前需要验证key的合法性或在数据库命中为空时设置空的缓存对象(需要注意对业务的影响)。


Redis:01缓存穿透和缓存雪崩及解决方案

缓存穿透


2.2 缓存击穿及缓存雪崩方案:

(1)给有失效时间的key加上一个随机数值,避免key的集体失效。

(2)进行数据预热(秒杀系统)将有可能会失效的key进行预先更新缓存时间。

(3)缓存备份 redis01失效后命中 redis02。

(4)加入锁机制进行限流操作。

三、代码样例

3.1 布隆过滤(可自己根据业务定制过滤方式如:维护自己的合法key的Cache)。


Redis:01缓存穿透和缓存雪崩及解决方案

bloomfilter

3.2 缓存雪崩(接口限流或服务降级)

比如令牌桶算法限流


Redis:01缓存穿透和缓存雪崩及解决方案

token-limit


分享到:


相關文章: