【发布时间】:2021-02-06 13:34:58
【问题描述】:
我正在努力用 Redis 替换 System.Web.Caching.Cache。我遇到的问题是,虽然 System.Web.Caching.Cache 似乎能够缓存我传递给它的任何对象,但 Redis 是基于字符串的。这意味着我必须自己担心序列化。
我尝试过的两种方法是 1) 使用 JSON.NET 将我的对象序列化为字符串,以及 2) 使用 BinaryFormatter。 JSON.NET 方法可能可以工作,但是当然有很多配置点(围绕什么序列化/忽略,如何处理引用循环等),并且使这种方法工作已经变成了相当多的工作.
我曾怀疑,BinaryFormatter 方法可能更接近 System.Web.Caching.Cache 在内部所做的。不过,我已经沿着这条路走了一段路,但我不再那么确定了。我尝试缓存的许多类型都没有标记为 [Serializable],这似乎排除了 BinaryFormatter。
我想知道是否有其他人遇到过类似的问题,或者知道 System.Web.Caching.Cache 在内部做什么,以便我可以模仿它。谢谢。
【问题讨论】:
-
我喜欢方法 1。我不知道了解 System.Web.Caching.Cache 在内部做什么是否真的有帮助。考虑您的应用程序与缓存机制的抽象进行交互,这样您就不需要“模拟”任何东西。使用方法 1 所面临的工作是迫使您准确考虑要缓存哪些数据(这是一个有用的练习!)。