Redis中过期删除策略和内存淘汰策略
过期删除策略
Redis的回收机制不会回收没有设定过期时间的数据,只会回收设置了有效期的。如果内存满了,那么就不会在接受写操作。
那为什么要设置过期时间呢?
- 可以确保缓存数据在一定时间内以有效。避免使用过期或无效的数据。
- 有效地释放内存空间,提高Redis服务器的性能和处理能力。
- 防止缓存雪崩,若同时大量数据失效或过期,那此时请求直接会落到数据库上,时数据库压力剧增。通过设置不同的过期时间,可以避免缓存同时过期,分散了请求对数据库的冲击,提高系统稳定性。
如果设置过期时间?
> expire key 10 // 给 key 设置过期时间, 单位 为 秒
> pexpire key 100 // 毫秒设置 过期时间
> persist key // 移除 key 的过期时间
判断键是否过期?
> exists ha // 判断是否存在 键
(integer) 1
> ttl key // 以秒为单位,返回 key的过期时间
> pttl key // 以毫秒为单位,返回key的过期时间
过期策略有哪些?
定期删除
每隔一段时间,随机检查一些设置过期时间的键,如果发现该键已经过期,那就将该键进行标记删除。
定期删除为什么选择抽检而不全检?
若遍历全部的键值对(无论是否过期),会耗费大量的资源和时间。又因为redis是单线程的,每次全检会消耗大量的CPU时间和内存带宽,导致redis性能下降。
惰性删除
惰性删除不会主动去检测删除,而是当你每次获取key的时候,会先检测 key 是否过期,如果没有过期就返回给你,若过期了,就直接删除了。