【问题标题】:ASP.NET: Moving from System.Web.Caching.Cache to RedisASP.NET:从 System.Web.Caching.Cache 迁移到 Redis
【发布时间】: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 所面临的工作是迫使您准确考虑要缓存哪些数据(这是一个有用的练习!)。

标签: c# asp.net caching redis


【解决方案1】:

System.Web.Caching.Cache 似乎能够缓存我传递给它的任何对象。这意味着我必须自己担心序列化。

这正是因为System.Web.Caching.Cache 在应用程序运行时存储对象引用

这样我就可以模仿它

很遗憾,你不能。 Redis 是一个远程服务。当您利用 Redis(即分布式缓存,减少本地计算机中的内存占用)时,您必须付出代价 - 自己处理序列化。

好消息是,有几个可用的序列化库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 2021-04-20
    • 2017-08-27
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    相关资源
    最近更新 更多