.net之用于 memcached .NET 客户端的高效通用序列化程序
我们有一个 ASP.NET MVC 应用程序,目前正在使用 .NET MemoryCache。 MemoryCache 快速高效,主要是因为它不克隆或序列化数据,但本质上是存储对对象的引用。
最近我们的客户决定我们需要扩展。为了测试我们的应用程序在多个进程中运行时的行为,我们的网络管理员将应用程序池配置为使用多个工作进程(所谓的“网络花园”模式)。我们的缓存开始返回不同的结果,这取决于哪个工作进程正在服务当前请求。
我们想不出任何简单的方法来同步清除所有工作进程的 MemoryCache 实例中的缓存条目(似乎没有 IIS API 可以让我们枚举应用程序的所有工作进程并调用一些“CleanUp”每个应用程序实例的方法)。所以我们决定转向更重要的东西 - memcached,稍后我们也可以在专用 Linux 服务器上设置缓存。
安装 memcached 和开始使用 Enyim .NET 客户端很容易。但是后来我们因无法像使用 MemoryCache 那样立即缓存所有内容而停止了。现在我们需要序列化一切。起初我们尝试了 .NET BinaryFormatter(Enyim 默认使用它),但它需要我们每个对象的 [Serializable] 属性,我们不能花太多时间爬行我们所有的代码库并用 [Serializable] 标记每个对象.另一个问题——我们不想像 BinaryFormatter 那样序列化所有私有(private)字段和属性。在所有其他方面,BinaryFormatter 都是我们能得到的最好的 - 它能够处理我们扔给它的所有东西。
然后我们尝试了著名的protobuf-net。抱歉,Marc,但这对我们不起作用,它需要太多的元数据配置。
我们不需要具有版本控制或后向兼容性的序列化程序,因为我们可以在部署新版本时清理缓存。我们有许多不同类型的可缓存对象,但没有什么太花哨的,没有 LINQ 表达式,没有可观察的集合,也没有其他类型的对象,这些对象通常对大多数序列化程序来说似乎是有问题的。
是否有 BinaryFormatter 的简单但生产就绪的替代品,它可以全局配置为仅序列化公共(public)字段和 Prop 并有效地存储它们(我猜 - 二进制)? “初始化后忘记”的东西,不需要任何属性或其他类型的模式定义,并且能够像 BinaryFormatter 一样处理可空值、可枚举值、自定义类型、装箱对象的东西?
请您参考如下方法:
看看 sharpserializer。它看起来不错,但有一些问题。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



