ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Redis 中数据过期策略采用定期删除和惰性删除策略: * 定期删除策略 Redis 启用一个定时器定时监视所有的 key,判断key是否过期,过期的话就删除。 这种策略可以保证过期的 key 最终都会被删除,但是也存在严重的缺点:每次都遍历内存中所有的数据,非常消耗 CPU资源,并且当 key 已过期,但是定时器还处于未唤起状态,这段时间内 key 仍然可以用。 * 惰性删除策略 在获取 key 时,先判断 key 是否过期,如果过期则删除。 这种方式存在一个缺点:如果这个 key一直未被使用,那么它一直在内存中,其实它已经过期了,会浪费大量的空间。 这两种策略天然的互补,结合起来之后,定时删除策略就发生了一些改变,不在是每次扫描全部的 key 了,而是随机抽取一部分 key 进行检查,这样就降低了对 CPU 资源的损耗,惰性删除策略互补了为检查到的key,基本上满足了所有要求。 但是有时候就是那么的巧,既没有被定时器抽取到,又没有被使用,这些数据又如何从内存中消失? 这个时候就需要用到了,内存淘汰机制. 内存淘汰机制分为: * 当内存不足以容纳新写入数据时,新写入操作会报错。(Redis 默认策略) * 当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 Key。(LRU推荐使用) * 当内存不足以容纳新写入数据时,在键空间中,随机移除某个 Key。 * 当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 Key。这种情况一般是把 Redis 既当缓存,又做持久化存储的时候才用。 * 当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 Key。 * 当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 Key 优先移除。