1. Redis中的过期操作
Redis是一款高性能的键值存储数据库,具有快速读写速度、支持多种数据结构、支持持久化等特点。而过期操作是Redis的一个重要功能,可以让Redis自动删除过期键,释放内存空间。
1.1 设置过期时间
Redis通过设置过期时间的方式来控制键的存活时间。当键的过期时间到达时,Redis会自动将它删除。我们可以通过EXPIRE命令来为键设置过期时间。例如,将键mykey的过期时间设置为10秒:
EXPIRE mykey 10
此时,mykey键的存活时间为10秒,之后会自动删除。除了EXPIRE命令,Redis还提供了PEXPIRE命令来以毫秒为单位设置过期时间。
1.2 查看剩余时间
使用TTL命令可以查看键的剩余生命时间,也就是它距离过期还有多少秒。如果返回-1,则表示键没有设置过期时间;如果返回-2,则表示键已经过期。
TTL mykey
例如,如果我们设置了一个过期时间为10秒的mykey键,那么在5秒后,执行TTL mykey会返回5。
2. Redis中的过期策略
Redis的过期策略有两种:定期删除和惰性删除。
2.1 定期删除
Redis会周期性的检查键是否过期,并删除过期键,这就是定期删除策略。具体来说,Redis每隔一段时间就会扫描一定数量的数据库键空间,删除其中已经过期的键。
定期删除策略通过配置文件中的hz
参数来控制执行频率,可以通过修改该参数的值来改变定期删除的触发频率。例如在redis.conf中修改如下参数:
hz 10
这就意味着,Redis每10秒钟就会检查一次数据库并删除过期键。
2.2 惰性删除
Redis还采用惰性删除策略,它将删除操作推迟到访问键时才执行。当客户端试图访问一个已经过期的键时,Redis会检测到这个键已经过期,并立即将它删除。因此,在惰性删除策略下,Redis只有在删除键操作时才进行过期检查,这样可以节省很多不必要的CPU时间和内存消耗。
2.3 淘汰策略
Redis还提供了一种淘汰策略,它可以在内存紧张时自动删除一些尽可能少用的键,以便于为新增键腾出更多的内存空间。
Redis目前支持6种淘汰策略:
noeviction:默认策略,表示不删除任何键,只返回错误信息提示内存不足。
volatile-lru:删除在设置了过期时间的键中,最近最少使用的键。
allkeys-lru:删除最近最少使用的键,包括已过期的和未设置过期时间的键。
volatile-lfu:删除在设置了过期时间的键中,使用频率最少的键。
allkeys-lfu:删除使用频率最少的键,包括已过期的和未设置过期时间的键。
volatile-random:在设置了过期时间的键中,随机删除一个键。
allkeys-random:随机删除一个键,包括已过期的和未设置过期时间的键。
我们可以通过配置文件中的maxmemory-policy
参数来设置淘汰策略。例如在redis.conf中:
maxmemory-policy allkeys-lru
这就表示当内存使用超过限制时,Redis会采用allkeys-lru策略删除最近最少使用的键,包括已过期的和未设置过期时间的键。
以上就是Redis中的过期操作和过期策略的相关内容介绍。