Redis_03 | Eloise's Paradise
0%

Redis_03

本章是redis系列第3讲, 主要介绍redis hyper log 和 bloom filter等高级类型的应用场景。以及redis常见面试题

缓存穿透

定义

既不在缓存, 也不在数据库。 这样的请求都会到达DB会给其造成压力。

解决方案

1
2
1. 给类似的key写入空值到缓存。后期可以缓存返回提示信息。 思路和实现简单,但是会造成额外的内存开销以及短时的数据一致性问题。		这种方式要注意两点, 第一, 需要在缓存查不到时写入空值到缓存,查到缓存时需要进行空值判断。
2. 布隆过滤器。 实现复杂,但是效果优于上一种。

缓存雪崩

1
短时间内大量的缓存key失效或者redis服务宕机。

解决方案

1
2
3
4
1. 如果是因为短时间内大量key导致的, 那么可以考虑避免这种情况的发生, 可以为不同的key设置不同的过期时间
2. 如果是服务宕机场景, 那么可考虑将redis设计为高可用集群。
3. 另外, 还可以为业务添加多级缓存 nginx缓存 redis缓存。jvm本地缓存。最后到DB
4. 引入限流策略。

缓存击穿

定义

1
缓存击穿也就热点key问题, 就是指一个被高并发访问且重建热点数据的业务实现复杂的热点key失效,导致无数请求会在瞬间打到DB上造成严重后果。

解决方案

方案 优点 缺点
互斥锁 实现简单
保证一致性

没有额外内存消耗
线程需要等待
可能导致死锁
逻辑过期 线程无需等待 效率高
不会导致死锁
需要额外的内存空间来维护一个逻辑过期属性
实现复杂
不保证一致性
-------------本文结束感谢您的阅读-------------