仅当密钥存在时如何重新设置

时间:2019-04-27 14:48:10

标签: redis

我使用redis来缓存我的Web博客。我的文章中有一个“已选中”字段,如果该字段在数据库中更改,我还需要将新值设置为redis,这是代码

if redis_conn.exists("article"):
    redis_conn.hset("article", "checked",1)

看起来还可以,但是如果文章密钥在存在之后且在hset之前过期,则将出现一些问题。文章密钥仅具有一个已选中字段,其他字段(如标题,内容等)将消失。

仅当密钥存在时如何设置密钥,如果密钥过期则什么都不做。

1 个答案:

答案 0 :(得分:1)

您可以为此使用Lua脚本,即(伪NodeJS):

redis_conn.eval("if redis.call('EXISTS', KEYS[1])==1 then redis.call('HSET', KEYS[1], ARGV[1], ARGV[2]) end", 1, "article", "checked", 1)

服务器端Lua脚本是原子脚本,因此可以确保该密钥在两次调用之间不会过期。

注意:Redis确实具有HSETNX命令,但没有HSETEX命令,这显然是您想要的。