Redis过期和增量

3
我有一个场景,需要使用Redis实现缓存机制。具体来说,我首先使用client.get()检查特定的键是否存在,如果值不存在,则需要调用Web服务返回一个值,并将其作为键的子项存储。然后我使用client.set()将此键设置到Redis中。如果此键已设置超过24小时,则需要使其过期,如何做到这一点呢?
以下是在Redis中键值对的示例:
parentValue:{
    child1:{
        serviceVal: "serviceVal",
        counter: 0
    },

    child2:{...},
    child3:{...}
    .... 
}

当进行初始的 client.get() 操作时,如果该值存在且该键没有过期,我想要增加对象中的 计数器 并更新 Redis 中的此特定键。我应该如何做?

1个回答

3

SET命令可选NXEX参数是您最简单的解决方案。在我正在工作的一个模块上可以看到一个示例这里

EX接受秒数,因此您需要86400秒,即24小时。

但是对于递增和过期,你最好使用一个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

然后,您只需要使用密钥、过期时间以及需要增加的数量来调用脚本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接