我在几个地方读到 Redis 是幂等的,所以重复调用SetEntryInHash()
不会有任何效果,对吧?
有什么好的使用案例SetEntryInHashIfNotExists()
吗?这可以比盲目调用更快的结果SetEntryInHash()
吗?
我在几个地方读到 Redis 是幂等的,所以重复调用SetEntryInHash()
不会有任何效果,对吧?
有什么好的使用案例SetEntryInHashIfNotExists()
吗?这可以比盲目调用更快的结果SetEntryInHash()
吗?
幂等意味着您可以多次重播相同的操作,并且会产生相同的副作用。只有像SADD这样的幂等操作是幂等的,即在调用 1 次或 1 次以上之后,您最终会得到相同的结果,即集合中的单个项目。
添加到 redis 列表,例如LINSERT相比之下不是幂等的,因为每个新项目都会向 redis 列表中添加一个新项目。
如果你想知道ServiceStack 的 Redis Client中的操作是如何实现的,只需查看源代码即可。SetEntryInHash 和 SetEntryInHashIfNotExists 在这里。它们都分别调用HSET和HSETNX。请参阅 redis 中的文档以了解每个操作的行为。
@mythz 是对的,手头有源代码,可以快速找到真正的答案,更不用说还包括指向 redis 文档的链接。我自己对差异感到好奇,并认为我会在这里为其他人发布澄清。
HSETNX:仅当字段尚不存在时,才将存储在键中的哈希中的字段设置为值。如果 key 不存在,则创建一个包含哈希的新 key。如果字段已存在,则此操作无效。
HSET:将存储在键中的哈希中的字段设置为值。如果 key 不存在,则创建一个包含哈希的新 key。如果字段已存在于哈希中,则将其覆盖。