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