Redis 用作缓存需要在意一下几个方面
- 缓存数据库的数据不一致问题
- 缓存雪崩、击穿、穿透
- 缓存替换策略
- Redis key 过期策略
前三点可以参考:极客时间 Redis核心技术与实战 笔记(实践篇 缓存)
Redis key 过期策略
不采用定时删除,而是惰性删除 + 定期删除
- 定期删除:Redis默认每个100ms随机抽取进行检查。缺点:如果只采用定期删除策略,会导致很多 key 到时间没有删除。
- 惰性删除:弥补定期删除的问题,也就是说在你获取某个key的时候,Redis会检查一下,这个key如果设置了过期时间那么是否过期了?如果过期了此时就会删除。
这里涉及到一个主从库读取的问题:
如果客户端从主库上读取留存的过期数据,主库会触发删除操作,此时,客户端并不会读到过期数据。
但是,从库本身不会执行删除操作,如果客户端在从库中访问留存的过期数据,从库并不会触发数据删除。
如果你使用的是 Redis 3.2 之前的版本,会返回过期数据。在 3.2 版本后,Redis 做了改进,如果读取的数据已经过期了,从库虽然不会删除,但是会返回空值,这就避免了客户端读到过期数据。所以,在应用主从集群时,尽量使用 Redis 3.2 及以上版本。
面试题:系统在10:05 设置一个值,并给出5分钟的过期时间,系统刚刚set完之后redis集群崩溃,10:11分系统重启成功,那么redis中set的值是否还存在?
参考答案:看重启后恢复情况(AOF、RDB)以及过期删除情况