我参与了用redis替换system.web.caching.cache的工作。我遇到的问题是,虽然system.web.caching.cache似乎能够缓存我传递给它的任何对象,但redis是基于字符串的。这意味着我必须为自己担心。
我尝试的两种方法是1)使用json.net将对象序列化为字符串,2)使用binaryformatter。json.net方法可能是可行的,但当然有许多配置点(围绕序列化/忽略什么、如何处理引用循环等),使这种方法可行已经变成了相当多的工作。
我曾怀疑,二进制格式化程序的方法可能更接近system.web.caching.cache在内部所做的工作。虽然我已经走了一段路,但我不再那么肯定了。我尝试缓存的许多类型没有标记为[serializable],这似乎排除了binaryformatter。
我想知道是否有其他人也遇到过类似的问题,或者知道system.web.caching.cache在内部做什么,以便我可以模仿它。谢谢。
1条答案
按热度按时间daolsyd01#
似乎可以缓存我传递给它的任何对象。这意味着我必须为自己担心。
那正是因为
System.Web.Caching.Cache
在应用程序运行时存储对象引用。所以我可以模仿它
不幸的是,你不能。redis是一种远程服务。当您利用redis(即分布式缓存,减少本地机器的内存占用)时,您必须自己支付处理序列化的代价。
好消息是,有几个序列化库可用。
newtonsoft.json文件
协议网
消息包csharp