我使用以下方法设置了带有过期计时器的密钥:
SETEX mykey 200 "Hello"
我想将TTL mykey的值添加到hset:
hset myhash f1 TTL mykey
但是,它显示以下错误:
ERR的HMSET参数数量错误
我正在尝试使用 Jedis 来实现此功能,是否有针对 jedis 的解决方案?
答案 0 :(得分:1)
是否要获取某个键的TTL值并将其放入哈希?然后尝试:
EVAL 'local ttl=redis.call("ttl",KEYS[1]) redis.call("hset","myhash",KEYS[2],ttl)' 2 mykey f1
此脚本获取TTL值mykey
(第一个参数),并将其放入myhash
字段f1
(第二个参数)中。
127.0.0.1:6370> SETEX mykey 2000“ Hello”
好
127.0.0.1:6370> eval'本地ttl = redis.call(“ ttl”,KEYS [1])redis.call(“ hset”,“ myhash”,KEYS [2],ttl)'2 mykey f1
(无)
127.0.0.1:6370> hget myhash f1
“ 1861”
您在评论中描述的是另一回事。这是我建议的设计: 与数据键x一起在需要时创建一个锁键x:lock。仅通过检查密钥的自定义LUA进行写操作。
eval 'local l=redis.call("get",KEYS[1]..":lock") if (l==false) then redis.call("setex",KEYS[1]..":lock",10,"t") return 1 end return 0' 1 mykey
del mykey:lock
eval 'local l=redis.call("get",KEYS[1]..":lock") if (l==false) then return redis.call("setex",KEYS[1],KEYS[2],KEYS[3]) end return nil' 3 mykey 2000 Hello
。如果成功,它将返回OK
,否则将返回(nil)
。