仅当该值不在哈希中时,才可能仅递增和使用 Redis 计数器并分配给哈希中的另一个值?

Possible to only increment and use a Redis counter and assign to another value in a hash only if that value is not already in the hash?

似乎无法避免始终首先调用 INCR,然后始终调用 HSETNX,但其中有很多,而且大多数永远不会改变,我将不必要地总是访问服务器两次。是吗?

伪例子(我知道这是不可能的,但我想问一下是否有一种模式可以达到同样的效果):

LET X = <some unique string>

TRANSACTION/PIPELINE {
    I = INCR GLOBAL COUNTER
    HSETNX(X, I)
}

值是唯一的,整数也是唯一的,但一对一映射,因为在我的情况下,我需要整数而不是其他地方的字符串。

这里重要的事情只是进行一次调用,并尽量避免在 99% 的时间里增加计数器,以避免将来发生冲突。

听起来您实际想要实现的逻辑是:

if not HEXISTS(myhash, x):
    i = INCR(counter)
    HSET(myhash, x, i)

如果您希望它是原子的(并且只使用到服务器的单次往返),请将其编写为一个简单的 Lua 脚本并 EVAL 它。