Node Redis – SET与EX和NX?

Redisbuild议使用带有可选参数的SET作为locking机制。 也就是说,“SETlocking1 EX 10 NX”只有在locking不存在时才会设置locking,locking将在10秒后过期。

我使用Node Redis,它有一个set()方法,但是我不知道如何传递额外的参数来使键过期,如果它已经存在,或者甚至是可能的,都不会被创build。

也许我必须使用setnx()和expire()作为单独的调用?

       

网上收集的解决方案 "Node Redis – SET与EX和NX?"

读完Node Redis源代码后,我发现所有的方法都接受任意数量的参数。 当生成有关错误数量的参数错误时,由Redis生成,而不是节点模块。

我早期试图提供多个参数是因为我只安装了Redis 2.2.x,其中SET只接受2.6.12的NX和EX参数。

因此,如果安装Redis 2.6.12,跟随方法调用将与节点redis一起使用,以便在variables不存在的情况下设置variables,并在5分钟后将其设置为过期:

$client->set('hello', 'world', 'NX', 'EX', 300, function(err, reply) {...}); $client->set(['hello', 'world', 'NX', 'EX', 300], function(err, reply) {...}); 

您可以使用Lua脚本来创build您自己的setnex命令。 所有Lua脚本都以primefaces方式运行,因此您不必担心其他客户端正在更改已经在脚本中读取的数据。

 -- setnex.lua local key = ARGV[1] local expiry = ARGV[2] local value = ARGV[3] local reply = redis.call("SETNX", key, value) if 1 == reply then redis.call("EXPIRE", key, expiry) end return reply 

你可以像这样从node_redis中调用它:

 client.eval(setnex_lua, 0, "mykey", 10, "myvalue", function (err, res) { console.dir(err); console.dir(res); });