数据过期策略
- 惰性删除策略
- 优点:对cpu比较友好,在用到该key的时候才去进行判断,对于很多用不到key不用浪费时间去检查是否过期
- 缺点:对内存不友好,如果一个key过期了,但是我们又一直没有用到该key,那么它就会一直存在内存中,占用的内存得不到释放
- 定期删除策略
- 优点:可以通过限制删除操作执行的时长和频率来减少删除操作对cpu的影响,也能有效的释放过期键解放一些内存
- 缺点:难以确定删除操作执行的时长和频率,相比而言不那么可控
来看看gpt如何解释把:
总之,Redis的过期key会在后台异步删除,而不是立即删除,以提高性能和避免阻塞操作。这种策略保证了Redis的高吞吐量和低延迟。但需要注意,Redis并不保证过期key一定会被删除,因为定期删除和惰性删除都是基于策略的,所以过期key可能会在一段时间内仍然存在于内存中。如果需要立即删除过期key,可以使用DEL命令手动删除它们。
惰性删除策略
设置key过期时间后,我们不去处理它,当需要用到该key时,我们再去检查它是否过期,如果该key过期,则删除该key,否则我们直接返回该key
举一个例子:
set name geng 10 我们设置一个key为name value为geng 过期时间为10
get name 我们去获取一下该key,如果发现name过期了,则直接删除掉该key
优点:对cpu比较友好,在用到该key的时候才去进行判断,对于很多用不到key不用浪费时间去检查是否过期
缺点:对内存不友好,如果一个key过期了,但是我们又一直没有用到该key,那么它就会一直存在内存中,占用的内存得不到释放
定期删除策略
每隔一段时间,我们对一些key进行检查(取一定数量的随机key),删除其中过期的key
定期清理又存在两种模式:
SLOW模式:slow模式是定时任务,执行频率默认为10hz,每次不超过25ms,可以通过redis.conf中的hz选项来配置
FAST模式:fast模式执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms