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

Is exists check required before calling StringSet method of StrackExchange.Redis

我在 C# 中使用 StackExchange.Redis 1.0.450 nuget。 我有如下代码,在添加之前检查 redis 中是否存在密钥 -

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

其中 CacheDatabase 对象

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

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

感谢您的回复。

是的,您可以放心地删除它。我们也不检查是否存在,因为这会导致有两个缓存访问点,而只有一个是必需的。这确实会减慢缓存访问速度。

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

  • 如果访问时 redis 缓存不可用,您可能必须使设置操作可重复。
  • 您可能必须使连接的初始化可重复
  • 请参考buffer redis stream如何使redis缓存条目的(反)序列化可靠且快速。

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