SetEntryInHash与SetEntryInHashIfNotExists

时间:2012-10-09 18:05:13

标签: c# redis servicestack

我在几个地方看过Redis是幂等的,所以反复拨打SetEntryInHash()会没有效果,对吗?

使用SetEntryInHashIfNotExists()是否有好的理由?这可以提供更快的结果,而不是盲目地调用SetEntryInHash()吗?

2 个答案:

答案 0 :(得分:2)

Idempotent表示您可以多次重播同一个动作,它会产生相同的副作用。只有SADD等幂等操作才是幂等的,即在调用1次或1次以上后,您将得到相同的结果,即集合中的单个项目。

添加到redis列表,例如相比之下,LINSERT并非幂等,因为每个新项目都会在redis列表中添加新项目。

如果您想了解ServiceStack's Redis Client中的操作是如何实现的,只需检查源代码即可。 SetEntryInHash and SetEntryInHashIfNotExists are here。他们分别致电HSETHSETNX。请参阅redis中的文档以了解每个操作的行为。

答案 1 :(得分:0)

@mythz是对的,随着源代码的到来,快速找到真正的答案,更不用说还包括redis文档的链接。我对自己的不同感到好奇,并认为我会在这里为其他人发布澄清。

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

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