我应该在ICacheManager中缓存json,Bson还是JObject?

时间:2017-10-03 13:14:30

标签: c# .net json caching cachemanager

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

我关注

  1. 在缓存中使用相当少量的内存。
  2. 不必要地序列化以避免无用的处理。
  3. 如果我缓存json string,我每次读取缓存时都需要解析它。

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

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

1 个答案:

答案 0 :(得分:2)

pursued this on github,长话短说,我最终在检索时缓存了json stringJObject.Parse

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

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

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

当使用两者时,你会受到两者要求的约束,这意味着你需要缓存json string并在检索时解析它们。

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

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