3

我在几个地方读到 Redis 是幂等的,所以重复调用SetEntryInHash()不会有任何效果,对吧?

有什么好的使用案例SetEntryInHashIfNotExists()吗?这可以比盲目调用更快的结果SetEntryInHash()吗?

4

2 回答 2

2

幂等意味着您可以多次重播相同的操作,并且会产生相同的副作用。只有像SADD这样的幂等操作是幂等的,即在调用 1 次或 1 次以上之后,您最终会得到相同的结果,即集合中的单个项目。

添加到 redis 列表,例如LINSERT相比之下不是幂等的,因为每个新项目都会向 redis 列表中添加一个新项目。

如果你想知道ServiceStack 的 Redis Client中的操作是如何实现的,只需查看源代码即可。SetEntryInHash 和 SetEntryInHashIfNotExists 在这里。它们都分别调用HSETHSETNX。请参阅 redis 中的文档以了解每个操作的行为。

于 2012-10-09T18:24:43.607 回答
2

@mythz 是对的,手头有源代码,可以快速找到真正的答案,更不用说还包括指向 redis 文档的链接。我自己对差异感到好奇,并认为我会在这里为其他人发布澄清。

HSETNX仅当字段尚不存在时,才将存储在键中的哈希中的字段设置为值。如果 key 不存在,则创建一个包含哈希的新 key。如果字段已存在,则此操作无效

HSET:将存储在键中的哈希中的字段设置为值。如果 key 不存在,则创建一个包含哈希的新 key。如果字段已存在于哈希中,则将其覆盖

于 2014-09-10T17:41:28.783 回答