1. redis内存淘汰策略?
- volatile-lru:从已设置过期时间的数据集(server. db[i]. expires)中挑选最近最少使用的数据淘汰。
- volatile-ttl:从已设置过期时间的数据集(server. db[i]. expires)中挑选将要过期的数据淘汰。
- volatile-random:从已设置过期时间的数据集(server. db[i]. expires)中任意选择数据淘汰。
- allkeys-lru:从数据集(server. db[i]. dict)中挑选最近最少使用的数据淘汰。
- allkeys-random:从数据集(server. db[i]. dict)中任意选择数据淘汰。
- no-enviction(驱逐):禁止驱逐数据。
2. redis如何保证缓存数据与数据库数据同步?
- 设计合理的过期时间
- 进行增删改操作时同步删除redis缓存数据
3. 什么是缓存穿透以及如何解决?
缓存穿透:查询的数据在数据库中不存在缓存中也不存在,这时有人恶意访问这种数据,请求到达数据库。
解决方案:
- 在controller层校验数据,对一些不合法的数据过滤掉。
- 使用bloom布隆过滤器。
- 存放一个空对象,并且设置过期时间不能超过5分钟。
4. 什么是缓存击穿以及如何解决?
缓存击穿: 数据库中存在,但是缓存中该数据过期了。这是有大量的请求访问该过期的数据。压力顶到数据库。
解决方案:
- 使用互斥锁。
- 设置永不过期。
5. 什么是缓存雪崩以及如何解决?
缓存雪崩: 当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。
解决方案:
- 设置散列的过期时间。
- 预热数据 [3]搭建redis集群。