我可以使用StackExchange.Redis在Redis中存储Null值吗?

时间:2016-06-13 14:33:37

标签: stackexchange.redis

有没有办法使用StackExchange.Redis客户端在Redis中存储Null值?

如果您使用IDatabase.StringGet(key),则返回Null用于表示“没有结果”。因此,如果您使用IDatabase.StringSet(key, null),则结果是您不知道 Null 值还是 No 值!

有没有适合这方面的机制? - 即您要缓存 否定

我非常希望避免任何令人讨厌的哨兵值(如value ?? new byte[] {1}),如果某个值恰好匹配,以后会导致问题!

我查看了RedisValue.Null,但这只会产生一个与上述问题相同的Null。

2 个答案:

答案 0 :(得分:1)

这是零点的常见困境。我们有类似的情况,这是我们如何处理它们: 1.我们从后端系统中检索日期列表并将其存储在缓存中。如果没有检索到日期,则DAL类返回null,如果错误/超时与后端系统通信,则抛出异常。为了缓存空值,我们用空列表替换了null - 这仍然表示没有可用的日期。 我们曾经将用户首选项存储为后端的字符串。空值表示用户未设置首选项。为了缓存这个,我们缓存了在用例中永远不会出现的特殊字符串值 - 类似于没有偏好

HTH。

答案 1 :(得分:1)

我正在使用代理模式来减少对数据库的调用。我发现的唯一合理的方法是在Redis中存储一个空字节数组。

byte[] array = new byte[0];
IDatabase.StringSet(key, array)

查询Redis时,可以使用value.IsNull检查字节数组是否为空。

这种方式似乎比存储0""或任何其他任意值更好。