在我的应用程序中,我们使用C#字典在内存中缓存大型Business对象。
为了将Redis缓存进行JSON序列化/反序列化,我正在将巨大的多轮引用C#对象(JSON序列化时为〜300KB)转换为DTO。
由于参数化的构造函数,我的业务层中的某些Types似乎无法轻松初始化。
有没有一种方法可以在不进行序列化的情况下进行Redis缓存?这样可以退还我缓存的相同对象吗?
答案 0 :(得分:2)
有没有一种方法可以在不进行序列化的情况下进行Redis缓存?
简短答案:否。
稍长的答案:不,因为Redis基于字符串。在这些字符串中,您可以存储各种各样的东西,但最终所有这些都归结为字符串。因此,当您要将某些内容存储在Redis中时,就无法脱离序列化。
Redis不是 plain 键值存储,它实际上是数据结构服务器,支持各种类型的值。这意味着,尽管在传统的键值存储中,您将字符串键关联到字符串值,但是在Redis中,该值不仅限于简单的字符串,还可以容纳更复杂的数据结构。以下是Redis支持的所有数据结构的列表,本教程将分别进行介绍:
- 二进制安全字符串。
- 列表:根据插入顺序排序的字符串元素的集合。它们基本上是链表。
- 集合:唯一的,未排序的字符串元素的集合。
- 排序集合,类似于集合,但是每个字符串元素都与一个称为得分的浮点数字值相关联。元素总是按照它们的分数排序,因此与Sets不同,可以检索一系列元素(例如,您可能会问:给我前10名或后10名)。
- 哈希,是由与值关联的字段组成的映射。字段和值都是字符串。这与Ruby或Python哈希非常相似。
- 位数组(或简称为位图):可以使用特殊命令来处理字符串值,例如位数组:您可以设置和清除单个位,计数所有设置为1的位,找到第一个位或未设置的位,依此类推。
- HyperLogLogs:这是一个概率数据结构,用于估计集合的基数。别害怕,它比看起来简单。...请参阅本教程的HyperLogLog部分。