【问题标题】:WebApi - Redis cache vs Output cacheWebApi - Redis 缓存与输出缓存
【发布时间】:2014-05-01 13:34:55
【问题描述】:

我一直在研究 Redis(完全没有经验——只是研究了理论),在做了一些研究后,发现它也被用作缓存。例如StackOverfolow 它自己。

我的问题是,如果我有一个 asp.net WebApi 服务,并且我在 WebApi 级别使用输出缓存来缓存响应,我基本上是在服务器的内存中存储某种键/值(请求/响应)以提供缓存回复。

现在 redis 是一个内存数据库,用 redis 缓存代替 WebApi 的输出缓存对我有什么帮助?

有什么优势吗?

我试图通过这个答案redis-cache-vs-using-memory-directyly,但我想我没有得到答案中的关键:

“基本上,如果您需要在共享相同数据的多个节点上扩展您的应用程序,则需要 Redis(或任何其他远程键/值存储)之类的东西。”

【问题讨论】:

    标签: caching asp.net-web-api redis outputcache


    【解决方案1】:

    我基本上是将某种键/值(请求/响应)存储在服务器的内存中以提供缓存的响应。

    这意味着在服务器重新启动后,服务器将不得不重建缓存。 Redis 不会出现这种情况。因此,与自制的内存解决方案相比,Redis 的一个优势是持久性(仅当这对您来说是个问题并且您不打算自己编写持久性时)。

    然后,您可以使用 Redis EXPIRE 或命令 EXPIREAT 甚至在将 api 输出字符串放入缓存时使用 简单地指定过期时间戳,而不是编写自己的过期机制SETEX.

    如果您需要在共享相同数据的多个节点上扩展您的应用程序

    这意味着如果你有多个相同 api 服务器的实例,将缓存放入 redis 将允许这些服务器共享相同的缓存,从而减少例如内存消耗(1 个缓存而不是 3 个 in-内存缓存)等等……

    【讨论】:

    • 谢谢。我现在确信,在您提到的缩放问题的情况下,这肯定是需要的。但是,对于您答案的第一部分......我的意思是我使用的是默认的 Asp.Net 输出缓存功能。我认为它可以管理您上面提到的大部分事情。我不是“构建”输出缓存功能,我只是使用内置功能。在这种情况下,您能否简要说明一下 redis 缓存必须提供哪些 asp.net 输出缓存不提供的功能?
    • 我也明白你的意思,服务器重启后,内置的 asp.net 缓存会丢失,redis 会维护它的缓存。还有其他优势吗?
    • 对不起,我不熟悉 Asp.net 输出缓存。在缓存场景的情况下,Redis 提供了许多优势:运行时配置、主/从、状态持久性、可选的持久性(参见 RDB 和 AOF)...
    • 当然,您必须考虑到使用 redis/memchached 或其他键值存储,您的数据需要序列化到另一个应用程序,这会降低性能。为了获得最佳性能,坚持使用 asp.net 的内存缓存(内存是共享的,因此不需要数据序列化)。当然,redis/memchached 提供了许多您可能感兴趣的其他优势。
    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 2018-02-14
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 2021-07-02
    • 2020-08-27
    • 1970-01-01
    相关资源
    最近更新 更多