【Redis】06 Redis常见问题
1. 什么是缓存穿透?如何避免?
缓存穿透,就是缓存查不到,去查后端。对后端系统压力很大。
解决方案
- 查询结果为空的情况进行缓存,缓存时间设置的短一点。
- 对一定不存在的key进行过滤。布隆表达式。
2. 什么是缓存雪崩,如何避免?
缓存大量失效,会给后端压力很大。
如何避免
- 控制数据库写缓存的线程数量
- 不同的key设置不同的过期时间,让缓存失效的时间点,尽量均匀
- 二级缓存。A1 原始缓存,A2 拷贝缓存。A1失效去访问A2。
3. 什么是缓存击穿,如何避免
热点key失效。缓存击穿。
解决:
setnx互斥锁进行判断。这样其他线程就处于等待状态,保证不会有大并发。
4. Redis 缓存淘汰策略
已设置过期时间的数据集
- voltile-lru 最近最少使用
- volatile-ttl 将要过期的数据
- volatile-random 任意
未设置过期时间
- allkeys-lru
- allkeys-random
- no-enviction禁止驱逐
5. LRU 原理
最近最少使用。
步骤
- 新数据插入到链表头部。
- 缓存命中的时候,把数据移动到头部。
- 链表满的时候,将链表尾的数据丢弃。