2016-06-13 132 views
4

有什么办法可以使用StackExchange.Redis客户端在Redis中存储空值?我可以使用StackExchange.Redis在Redis中存储空值吗?

如果您使用IDatabase.StringGet(key)则返回空值用于表示“没有结果”。因此,如果您使用IDatabase.StringSet(key, null)那么结果是你不知道是否有空值值或没有值!

是否有任何机制为此提供服务? - 即你想缓存一个负数

我更希望避免任何令人讨厌的哨兵值(如value ?? new byte[] {1}),如果值发生匹配,可能会引发问题!

我看了一下RedisValue.Null,但这只是产生了一个与上面相同的问题。

+0

你的用例是什么?为什么你想在一个密钥上存储null? – zendu

+1

我的缓存层减少了对数据库的调用。有些时候,我没有从我的数据库中获得结果,所以我想缓存该结果,以便下次调用仅访问缓存(结果为“数据为空”)。目前,空响应表明缓存没有结果,因此我最终转到数据库,然后获取“无”结果。 – OffHeGoes

回答

0

这是空值的常见困境。我们遇到过类似的情况,下面是我们如何处理它们: 1.我们从后端系统检索日期列表并将它们存储在缓存中。如果没有检索日期,则DAL类返回null,并在与后端系统进行错误/超时通信的情况下抛出异常。为了缓存空值,我们用空列表替换了空值 - 这仍然表示没有可用的日期。 2.我们曾经把用户喜好作为字符串存储在后端。空值表示用户没有设置偏好。为了缓存这个,我们缓存了在用例中永远不会发生的特殊字符串值 - 例如NO PREFERENCE

HTH。

相关问题