缓存雪崩:在一个时间段内,有大量的key过期,或者Redis服务宕机,导致大量的请求到达数据库,带来巨大压力
- 给key设置不同的TTL、利用Redis集群提高服务的高可用性、添加多级缓存、添加降级流策略
缓存击穿:给某一个key设置了过期时间,当key过期的时间,恰好这个时间点有大量的并发请求访问这个key,可能会瞬间把数据库压垮
- 互斥锁:缓存失败时,只允许一个请求去加载数据并更新缓存,其他请求阻塞等待
- 逻辑过期时间:不给key设置过期时间,而是添加一个逻辑过期时间字段,查询缓存发现逻辑过期时间已过期时,再获取互斥锁,如果获取成功,则开启一个新线程去查询数据并更新缓存,失败则返回过期数据
缓存穿透;访问一个不存在的数据,在数据库没有读取到也不会直接写入缓存,导致每次请求都到达数据库,带来压力
- 缓存空数据:查询返回的数据为空,仍然将空数据缓存;实现简单、消耗内存
- 布隆过滤器:将可能存在的数据哈希到一个足够大的bitmap,可以过滤掉一些不存在的数据,避免了DB的查询
缓存预热:在系统启动或缓存失效后,提前将部分数据加载到Redis缓存中,提高系统的响应速度和性能