在redis中,如果密钥在一段时间内未被访问,我们如何删除
在redis中,我首先存储密钥值。我将使用GET命令来检索值,以检查该键是否存在于后续请求中。如果某个密钥在一定时间内(如60分钟)未被访问,则应删除该密钥。否则就只能这样了。那么,我们怎样才能达到这个要求呢。我知道redis中存在TTL功能,但它将在指定的持续时间后删除,但我希望只有在60分钟内未访问该密钥时,才能删除该密钥。redis中的TTL不能在hset中为每个密钥设置,只能为每整组密钥设置 原因是实现会很复杂,redis的创建者希望它尽可能简单 以下是一些解决方法:在redis中,如果密钥在一段时间内未被访问,我们如何删除,redis,Redis,在redis中,我首先存储密钥值。我将使用GET命令来检索值,以检查该键是否存在于后续请求中。如果某个密钥在一定时间内(如60分钟)未被访问,则应删除该密钥。否则就只能这样了。那么,我们怎样才能达到这个要求呢。我知道redis中存在TTL功能,但它将在指定的持续时间后删除,但我希望只有在60分钟内未访问该密钥时,才能删除该密钥。redis中的TTL不能在hset中为每个密钥设置,只能为每整组密钥设置 原因是实现会很复杂,redis的创建者希望它尽可能简单 以下是一些解决方法: 使用顶级set/g
如果您可以将数据保存为键值对,即字符串,而不是散列。您可以使用
SET
命令和Lua脚本实现这一目标:
设置操作
当您需要设置密钥-值对时,还需要指定一个TTL,以确保在60秒内没有访问权限时,密钥将自动删除:
SET key value EX 60
获取操作
当您尝试获取该值时,如果该键存在,还可以使用Lua脚本将其TTL重置为60秒:
-- get.lua
local key = KEYS[1]
local val = redis.call("get", key)
if (val) then
redis.call("expire", key, 60)
end
return val
注意:如果您不想每次都用SET命令指定TTL,或者您的Redis版本不支持
EX
选项,您也可以将SET
和EXPIRE
命令包装到Lua脚本中。我可以使用SET/get aslo代替hset来存储无问题。但是有没有其他方法可以代替每次更新到期时间?我认为这是不可能的。我在谷歌上搜索过类似的问题,发现了这样一条线索:相貌相关