我有一个场景,我想用redis实现一个缓存机制。进一步详细说明
首先,我使用 client.get()检查特定密钥,如果值不存在。我需要调用一个Web服务,它返回一个值并存储为键的子节点。然后我使用 client.set()将此密钥设置为redis。现在,如果设置超过24小时,此密钥需要过期,我该怎么做?
以下是redis
中键值的示例parentValue:{
child1:{
serviceVal: "serviceVal",
counter: 0
},
child2:{...},
child3:{...}
....
}
现在,当执行初始 client.get()时,如果值存在且此特定键未过期,则类似。我想增加对象中的计数器并在redis中更新此特定键。我怎么能这样做?
答案 0 :(得分:1)
SET
with NX
and EX
选项是您最简单的解决方案。请参阅我正在处理here的模块上的示例。
EX
接受秒数,因此您需要24小时86400
秒。
但是对于递增和过期,你可能最好使用redis lua脚本,例如:
--[[
key 1 -> key name
arg 1 -> expires in seconds
arg 2 -> incr by value
]]
-- Key exists so increment it
if redis.call('exists',KEYS[1]) > 0 then
redis.call('incrby',KEYS[1],tonumber(ARGV[2]))
return 0
else
-- key doesn't exist so create with an expiry and the incr amount
redis.call('setex',KEYS[1],tonumber(ARGV[1]),tonumber(ARGV[2]))
return 1
end
然后你只需要用密钥,到期时间以及增加多少来调用脚本。