在缓存系统中, key的超时策略和淘汰机制是非常重要的两个概念,一下是对这两个概念的简单介绍:
Redis中的Key超时策略和Key淘汰机制是为了有效管理内存和控制数据的生命周期.
1.Key的超时策略:在Redis中可以针对每个Key设置过期时间, 当过期后,它将会被自动删除, 以释放内存的空间, Redis并不支持基于访问次数的过期时间, 也就是说, 无论这个Key是否会被访问到, 只要设置的过期时间一到, Redis就会把它删除掉.
需注意的是,Redis的过期时间是以秒的单位来进行设置的, 可以通过使用EXPIRE命令来设置过期时间, 例如EXPIRE key seconds来进行设置, 其中key 表示过期时间的key seconds表示过期时间,时间是以秒为单位.
除了设置时间, 还可以使用TTL来获取一个key的过期时间, 例如 TTL key 该命令会返回一个整数值表示key的剩余时间(以秒为单位), 如果返回-1 则表示key没有设置过期时间,如果返回-2,则表示key不存在.
超时策略可以用于缓存失效,会话管理等场景,使得Redis可以自动清理不再使用数据,释放内存.
Redis中的key的超时策略有两种:定时删除和惰性删除。其中,定时删除是指在设置key的过期时间时,同时创建一个定时器,当key过期时,定时器会立即执行删除操作。而惰性删除则是指在获取key时,先检查该key是否过期,如果过期则删除。此外,Redis还会定期地对一定数量的key进行过期检测和删除,以保证内存空间的有效利用。这个过程被称为定期删除.
2.Key淘汰机制:当Redis的内存不足时则需要使用淘汰机制看来决定哪些Key会被删除以释放空间,以下是常见的几种淘汰机制:
Redis6种淘汰机制
1.noeviction:当内存不足以容纳新写入数据时,新写入操作会报错(一般没人用,但是默认是使用这个策略)
2.allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(最常用)
3.allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key (一般没人用)
4.volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key(一般不太合适)
5.volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个
6.key volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除
这些策略的实现都是为了提高Redis的性能和效率。需要注意的是,由于只抽取了部分key,可能会存在过期了但没有被删除的key,因此在查询对应的key时需要注意。同时,为了避免影响性能,Redis采用随机抽取的方式进行淘汰,而不是全量检查