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