在调用StrackExchange.Redis的StringSet方法之前是否需要检查

时间:2015-06-10 13:08:42

标签: c# redis stackexchange.redis

我在C#中使用StackExchange.Redis 1.0.450 nuget。 我有类似下面的代码,它会在添加密钥之前检查密钥是否存在于redis中 -

if (!Cache.KeyExists(fKey))
{
    Cache.StringSet(fKey, Serialize(data));
}

缓存 数据库 对象

我在这里阅读有关redis SET命令http://redis.io/commands/set 并发现如果已存在,SET将覆盖现有的键值。 使用StackExchange.Redis可以安全地删除存在的检查条件并调用 -

Cache.StringSet(fKey, Serialize(data));

感谢您的回复。

2 个答案:

答案 0 :(得分:2)

是的,你可以保存删除它。我们也没有检查是否存在,因为这将导致有两个访问点到缓存,其中只有一个是必要的。这确实会降低缓存访问速度。

您可能需要考虑其他三件事:

  • 如果在访问时没有redis缓存,则可能必须使set动作可重复。
  • 您可能必须初始化连接的可重复性
  • 请参考buffer redis stream如何可靠,快速地(de)对redis缓存条目进行序列化。

答案 1 :(得分:2)

默认行为是简单地覆盖,所以如果你没问题:你不需要检查。还有一个可选的when参数,可让您更精确地控制此参数 - 请参阅redis NX文档中的SET etc参数,了解这在现实中意味着什么。对于“相等”检查,您可以使用具有约束的事务。

相关问题