为什么 Jedis 中 set() 的 nxxx 参数是互斥的?

7
在Jedis中,我希望通过一次调用来设置一些键和值,并具有过期时间。
我可以通过set()和expire()的组合来实现这一点,但需要两个调用。
我发现以下方法:
set(final String key, final String value, final String nxxx, final String expx, final long time)
但我必须选择nx(仅在键不存在时设置键)或xx(仅在键已存在时设置键)。
我想涵盖这两种情况。
有任何建议吗?或是有任何原因写成这样?
2个回答

11

Redis有一个SETEX命令,可在设置键时设置其到期时间。

jedis.setex(key, expireAfter, value);

注意:由于SET命令选项可以替换SETNX、SETEX、PSETEX,因此在Redis的未来版本中,这三个命令可能会被弃用并最终删除。来源-https://redis.io/commands/set - LoveToCode
1
如果它被移除了,那么这个问题仍然没有得到解答。请解释一下... - LoveToCode
根据Redis SETEX文档中的说明,@LoveToCode:
SET mykey value EXPIRE mykey seconds SETEX是原子性的,并且可以在MULTI / EXEC块内使用前两个命令来重现。
因此,可以使用以下Jedis代码:final String key = "foo"; final Transaction t = jedis.multi(); t.set(key, "bar"); // 设置键和值 t.expire(key, 10); // 将其设置为在10秒后过期 t.exec();但是,如果删除SETEX,我想Jedis会在幕后进行更改。
- 3ygun

0

这个问题非常误导人。nx和xx确实是用于不同的用例并且互斥的。如果您想简单地覆盖任何到期时间,只需不传递以下任何一个:

  • NX -- 仅在键不存在时设置键
  • XX -- 仅在键已存在时设置键

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