如何在Redis(Jedis)中的hset中添加键的TTL值

时间:2018-07-16 10:29:14

标签: redis jedis

我使用以下方法设置了带有过期计时器的密钥:

SETEX mykey 200 "Hello"

我想将TTL mykey的值添加到hset:

hset myhash f1 TTL mykey

但是,它显示以下错误:

  

ERR的HMSET参数数量错误

我正在尝试使用 Jedis 来实现此功能,是否有针对 jedis 的解决方案?

1 个答案:

答案 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
  • SETEX(可识别锁定)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)