如何在不进行序列化的情况下Redis缓存大型C#对象?

时间:2018-12-31 12:33:02

标签: c# .net redis

在我的应用程序中,我们使用C#字典在内存中缓存大型Business对象。

为了将Redis缓存进行JSON序列化/反序列化,我正在将巨大的多轮引用C#对象(JSON序列化时为〜300KB)转换为DTO。

由于参数化的构造函数,我的业务层中的某些Types似乎无法轻松初始化。

有没有一种方法可以在不进行序列化的情况下进行Redis缓存?这样可以退还我缓存的相同对象吗?

1 个答案:

答案 0 :(得分:2)

  

有没有一种方法可以在不进行序列化的情况下进行Redis缓存?

简短答案:

稍长的答案:不,因为Redis基于字符串。在这些字符串中,您可以存储各种各样的东西,但最终所有这些都归结为字符串。因此,当您要将某些内容存储在Redis中时,就无法脱离序列化。

  

Redis不是 plain 键值存储,它实际上是数据结构服务器,支持各种类型的值。这意味着,尽管在传统的键值存储中,您将字符串键关联到字符串值,但是在Redis中,该值不仅限于简单的字符串,还可以容纳更复杂的数据结构。以下是Redis支持的所有数据结构的列表,本教程将分别进行介绍:

     
      
  • 二进制安全字符串。
  •   
  • 列表:根据插入顺序排序的字符串元素的集合。它们基本上是链表。
  •   
  • 集合:唯一的,未排序的字符串元素的集合。
  •   
  • 排序集合,类似于集合,但是每个字符串元素都与一个称为得分的浮点数字值相关联。元素总是按照它们的分数排序,因此与Sets不同,可以检索一系列元素(例如,您可能会问:给我前10名或后10名)。
  •   
  • 哈希,是由与值关联的字段组成的映射。字段和值都是字符串。这与Ruby或Python哈希非常相似。
  •   
  • 位数组(或简称为位图):可以使用特殊命令来处理字符串值,例如位数组:您可以设置和清除单个位,计数所有设置为1的位,找到第一个位或未设置的位,依此类推。
  •   
  • HyperLogLogs:这是一个概率数据结构,用于估计集合的基数。别害怕,它比看起来简单。...请参阅本教程的HyperLogLog部分。
  •   

更多信息:An introduction to Redis data types and abstractions