Redis是一个开源的,基于内存的数据结构存储系统,可以用作数据库、缓存和消息中间件,Redis支持多种数据类型,如字符串、列表、集合、散列和有序集合等,在实际应用中,我们经常需要设置Redis中key的缓存失效时间,以便在一定时间内自动删除过期的key,本文将详细介绍如何在Redis中设置key缓存失效时间。
1、使用EXPIRE
命令设置单个key的缓存失效时间
EXPIRE
命令用于设置key的过期时间,单位为秒,当key的过期时间到达时,Redis会自动删除该key,我们可以使用以下命令为名为mykey
的key设置缓存失效时间为60秒:
EXPIRE mykey 60
2、使用PEXPIRE
命令设置带毫秒级精度的单个key的缓存失效时间
PEXPIRE
命令用于设置key的过期时间,单位为毫秒,与EXPIRE
命令类似,当key的过期时间到达时,Redis会自动删除该key,我们可以使用以下命令为名为mykey
的key设置缓存失效时间为60000毫秒(即60秒):
PEXPIRE mykey 60000
1、使用MULTI
和EXEC
命令批量设置多个key的缓存失效时间
MULTI
命令用于开启一个事务,而EXEC
命令用于执行事务中的所有命令,我们可以在一个事务中执行多个EXPIRE
或PEXPIRE
命令,以批量设置多个key的缓存失效时间,我们可以使用以下命令批量为名为mykey1
、mykey2
和mykey3
的三个key设置缓存失效时间为60秒:
MULTI EXPIRE mykey1 60 EXPIRE mykey2 60 EXPIRE mykey3 60 EXEC
2、使用脚本批量设置多个key的缓存失效时间
除了使用事务,我们还可以使用Lua脚本来批量设置多个key的缓存失效时间,我们需要编写一个Lua脚本,然后在Redis中使用EVAL
命令执行该脚本,我们可以编写以下Lua脚本来批量为名为mykey1
、mykey2
和mykey3
的三个key设置缓存失效时间为60秒:
local keys = {"mykey1", "mykey2", "mykey3"} for i, key in ipairs(keys) do redis.call("EXPIRE", key, 60) end return nil
在Redis中使用以下命令执行该脚本:
EVAL "$(cat script.lua)" 0
除了手动设置key的缓存失效时间,Redis还提供了三种过期策略,用于自动删除过期的key:
1、noeviction
:不删除任何key,只是返回一个错误,这种策略适用于写操作非常少的场景。
2、volatile-lru
:从已设置过期时间的键空间中挑选最近最少使用的键进行删除,如果没有键设置了过期时间,那么就会随机挑选一个键进行删除,这种策略适用于读操作非常频繁,但写操作相对较少的场景。
3、allkeys-lru
:从所有键空间中挑选最近最少使用的键进行删除,这种策略适用于所有的键都可能被访问到的场景。
4、volatile-random
:从已设置过期时间的键空间中随机挑选一个键进行删除,如果没有键设置了过期时间,那么就会随机挑选一个键进行删除,这种策略适用于读操作非常频繁,但写操作相对较少的场景。
5、allkeys-random
:从所有键空间中随机挑选一个键进行删除,这种策略适用于所有的键都可能被访问到的场景。
6、volatile-ttl
:从已设置过期时间的键空间中挑选剩余生存时间最短的键进行删除,如果没有键设置了过期时间,那么就会随机挑选一个键进行删除,这种策略适用于读操作非常频繁,但写操作相对较少的场景。