使用asp.net的redis会话提供程序我可以找到哈希和字段,但不能找到值。

时间:2014-08-05 23:20:53

标签: asp.net redis

我安装后它工作得很好。但是,当我查看数据时,在Redis数据库中,我看到已经创建了具有正确字段的哈希,但这些字段没有我可以在其中看到的任何值。我尝试了HGETALL {hashkey}和HGET {hashkey} {fieldname},它返回字段名称,但没有显示任何值。我错过了什么?

1 个答案:

答案 0 :(得分:0)

这是我所说的我相信的图书馆。让我解释一下xml,这是一个很好的恐怖故事。最初,我们使用了ServiceStack的json序列化程序类,它们无法序列化DataTable。然后,在我们从之前的团队继承的生产网站中,有几个Session个密钥存储了DataTable,我们不知道它们在哪里或者它们甚至存在。

因此,当我们将RedisSessionProvider推广到该站点时,发现了很多未发现的崩溃,最后我添加了许多日志记录委托,最终允许我们查看我们正在进行序列化的对象类型。

来自mythz的帖子,ServiceStack的创建者,在某处说DataTable之类的东西并不是真的要序列化为JSON开头,因为他们做了一些非常古怪的事情,包括命名空间和循环引用很难用JSON表达。在一天结束时,他们决定根本不提供该功能,更糟糕的是,发生的异常消息没有明确地提及这个限制,从日志中说明。

最后跟踪它,并需要快速修复它,并认为这是一个罕见的边缘情况,所以我只使用基本的.NET xml序列化程序,它可以与DataTable一起使用作为快速修复。前面的字节不是字节,而是存储在redis散列键中的对象类型的标识符字符串(因为JSON是无类型的)。您可以找到所有键的相似类型提示,并且您可以控制从库中覆盖它(RedisJSONSerializer.cs查找typeInfoPattern并覆盖它)


TL:DR;将DataTable存储在Session中并不是一个好主意,但是现在我们应该能够更轻松地支持JSON.NET作为序列化库。因此,当我有机会时,我会尝试修补它,它应该缩小空间DataTable占用你的Redis散列。