本章是redis系列第3讲, 主要介绍redis hyper log 和 bloom filter等高级类型的应用场景。以及redis常见面试题
缓存穿透
定义
既不在缓存, 也不在数据库。 这样的请求都会到达DB会给其造成压力。解决方案
1 | 1. 给类似的key写入空值到缓存。后期可以缓存返回提示信息。 思路和实现简单,但是会造成额外的内存开销以及短时的数据一致性问题。 这种方式要注意两点, 第一, 需要在缓存查不到时写入空值到缓存,查到缓存时需要进行空值判断。 |
缓存雪崩
1 | 短时间内大量的缓存key失效或者redis服务宕机。 |
解决方案
1 | 1. 如果是因为短时间内大量key导致的, 那么可以考虑避免这种情况的发生, 可以为不同的key设置不同的过期时间 |
缓存击穿
定义
1 | 缓存击穿也就热点key问题, 就是指一个被高并发访问且重建热点数据的业务实现复杂的热点key失效,导致无数请求会在瞬间打到DB上造成严重后果。 |
解决方案
| 方案 | 优点 | 缺点 |
|---|---|---|
| 互斥锁 | 实现简单 保证一致性 没有额外内存消耗 |
线程需要等待 可能导致死锁 |
| 逻辑过期 | 线程无需等待 效率高 不会导致死锁 |
需要额外的内存空间来维护一个逻辑过期属性 实现复杂 不保证一致性 |