【Redis】06 Redis常见问题

1. 什么是缓存穿透?如何避免?

缓存穿透,就是缓存查不到,去查后端。对后端系统压力很大。

解决方案

  • 查询结果为空的情况进行缓存,缓存时间设置的短一点。
  • 对一定不存在的key进行过滤。布隆表达式。

2. 什么是缓存雪崩,如何避免?

缓存大量失效,会给后端压力很大。

如何避免

  • 控制数据库写缓存的线程数量
  • 不同的key设置不同的过期时间,让缓存失效的时间点,尽量均匀
  • 二级缓存。A1 原始缓存,A2 拷贝缓存。A1失效去访问A2。

3. 什么是缓存击穿,如何避免

热点key失效。缓存击穿。

解决:

setnx互斥锁进行判断。这样其他线程就处于等待状态,保证不会有大并发。

【Redis】06 Redis常见问题

4. Redis 缓存淘汰策略

已设置过期时间的数据集

  • voltile-lru 最近最少使用
  • volatile-ttl 将要过期的数据
  • volatile-random 任意

未设置过期时间

  • allkeys-lru
  • allkeys-random
  • no-enviction禁止驱逐

5. LRU 原理

最近最少使用。
【Redis】06 Redis常见问题

步骤

  1. 新数据插入到链表头部。
  2. 缓存命中的时候,把数据移动到头部。
  3. 链表满的时候,将链表尾的数据丢弃。