2

我有一些需要缓存的 JObject,我想知道在CacheManager中缓存此类数据时的最佳做法是什么?

我很担心

  1. 在缓存中使用相当少量的内存。
  2. 不要不必要地序列化以避免无用的处理。

如果我缓存 json string,我每次读取缓存时都需要解析它。

如果我缓存JObject我不知道它将如何被序列化到缓存中。可能是一个非紧凑的二进制数组。但是在检索到它之后,我不必对它做任何事情。

这就是为什么我正在考虑它可能会Bson更好地序列化,或者这可能会简单地添加另一层序列化?毕竟,我必须在读取缓存时将其转换为BsonJObject就像我要缓存 json 一样string

4

1 回答 1

3

在 github上进行了这个,长话短说,我最终在检索时缓存了 jsonstring和它。JObject.Parse

要问的相关问题是“你在使用分布式缓存吗?” 我是,而且我也在使用本地缓存。

如果我只使用本地缓存,我可以将JObjects 直接放入缓存中,因为不涉及序列化。

但是,当使用分布式缓存时,您实际上不能将 aJObject放入其中,因为该类型不可序列化(否SerializableAttribute)。

使用两者时,您会受到两者要求的限制,这意味着您需要缓存 jsonstring并在检索时解析它们。

可以使用 CacheManager.Serialization.Json 包来换出序列化机制。但我宁愿在我的场景中保留二进制序列化程序,因为我主要缓存 POCO,而二进制序列化程序通常应该更有效。无论如何,我认为使用它不会给我带来任何性能提升,因为内置的序列化程序无论如何都必须在内部将 JObjects 转换为 json。

总之:通过保留二进制序列化程序并将 json 缓存为strings,我不会失去性能,但是JObject.Parse(..)在从缓存中读取时,我必须在这里和那里添加一些。有了良好的封装,这不是问题。

于 2017-10-17T12:03:55.193 回答