我有一些需要缓存的JObject,我想知道在CacheManager中缓存这些数据时最佳做法是什么?
我关注
如果我缓存json string
,我每次读取缓存时都需要解析它。
如果我缓存JObject
我不知道如何将其序列化到缓存中。可能是一个非紧凑的二进制数组。但是在检索之后我不必做任何事情。
这就是为什么我考虑可能它会更好地序列化Bson
,或者可能只是添加另一层序列化?毕竟,我在阅读缓存时必须将Bson
转换为JObject
,就像我要缓存json string
一样。
答案 0 :(得分:2)
我pursued this on github,长话短说,我最终在检索时缓存了json string
和JObject.Parse
。
要问的相关问题是"您使用的是分布式缓存吗?"我是,而且我也在使用本地缓存。
如果我只使用本地缓存,我可以将JObject
直接放在缓存中,因为不涉及序列化。
但是,当使用分布式缓存时,实际上无法将JObject
放入其中,因为该类型不可序列化(无SerializableAttribute
)。
当使用两者时,你会受到两者要求的约束,这意味着你需要缓存json string
并在检索时解析它们。
可以使用CacheManager.Serialization.Json包来交换序列化机制。但我宁愿在我的场景中保留二进制序列化器,因为我主要是缓存POCO,而二进制序列化器通常应该更有效。我不认为使用它会为我带来任何性能提升,因为内置的序列化器必须在内部将JObject转换为json。
总之:通过保留二进制序列化器并将json缓存为string
,我不会失去性能,但我必须在这里和那里添加一些JObject.Parse(..)
从缓存中读取。通过适当的封装,这不是问题。