gpt4 book ai didi

c# - 我应该在 ICacheManager 中缓存 json、Bson 还是 JObject?

转载 作者:行者123 更新时间:2023-11-30 23:08:25 24 4
gpt4 key购买 nike

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

我很关心

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

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

如果我缓存 JObject 我不知道它将如何序列化到缓存中。可能是一个非紧凑型二进制数组。但是在取回它之后我不需要对它做任何事情。

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

最佳答案

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

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

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

然而,当使用分布式缓存时,您实际上不能将 JObject 放入其中,因为该类型不可序列化(没有 SerializableAttribute)。

当同时使用两者时,您会受到两者要求的限制,这意味着您只能缓存 json string 并在检索时解析它们。

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

结论:通过保留二进制序列化程序并将 json 缓存为 string,我不会损失性能,但我必须添加一些 JObject.Parse(。 .) 从缓存中读取时到处都是。通过适当的封装,这不是问题。

关于c# - 我应该在 ICacheManager 中缓存 json、Bson 还是 JObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46545486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com