WebApi - Redis缓存 vs 输出缓存

4
我一直在学习Redis(没有任何经验,只是学习理论),经过一些研究,发现它也被用作缓存。例如StackOverfolow本身。我的问题是,如果我有一个asp.net WebApi服务,并且我在WebApi级别使用输出缓存来缓存响应,那么我基本上是将一种键/值(请求/响应)存储在服务器的内存中以提供缓存响应。现在,由于Redis是一个内存数据库,它如何帮助我用redis缓存替换WebApi的输出缓存?有什么优点吗?我尝试阅读这个答案redis-cache-vs-using-memory-directyly,但我想我没有得到答案中的关键线索:"基本上,如果您需要应用程序在共享相同数据的几个节点上进行扩展,则需要像Redis(或任何其他远程键/值存储)这样的东西。"
1个回答

4
我基本上在服务器内存中存储键/值(请求/响应),以提供缓存响应。这意味着在服务器重新启动后,服务器将不得不重建缓存。但是,Redis就不会出现这种情况。因此,Redis相对于自制内存解决方案的一个优点是持久性(仅当您需要并且您没有计划自行编写持久性时才是如此)。然后,您可以使用Redis的EXPIRE或命令EXPIREAT,甚至只需在将api输出字符串放入缓存时指定过期时间戳即可使用SETEX,而不是编写自己的过期机制。如果您需要使应用程序在共享相同数据的多个节点上扩展,则需要。
这意味着,如果您有多个相同的API服务器实例,将缓存放入Redis将允许这些服务器共享相同的缓存,从而减少例如内存消耗(1个缓存代替3个内存缓存)等问题...

谢谢。我现在确信,在你提到的扩展方面,这肯定是必需的。但是对于你回答的第一部分...我的意思是我正在使用默认的Asp.Net输出缓存功能。我认为它管理了你上面提到的大部分内容。我没有“构建”输出缓存功能,只是使用内置功能。在这种情况下,您能否简要说明Redis缓存提供了什么,而Asp.net输出缓存则没有? - M. Ali Iftikhar
我也理解您的观点,即在服务器重新启动时,内置的asp.net缓存将丢失,而redis将维护其缓存。还有其他优点吗? - M. Ali Iftikhar
1
抱歉,我不熟悉Asp.net输出缓存。在缓存方案的情况下,Redis提供了许多优势:运行时配置、主/从、状态持久性、可选耐久性(参见RDB和AOF)... - FGRibreau
当然,你必须考虑到使用redis/memcached或其他键值存储时,你的数据需要序列化到另一个应用程序中,这会降低性能。为了获得最佳性能,请坚持使用asp.net的内存缓存(内存是共享的,因此不需要对数据进行序列化)。当然,redis/memcached还提供了许多其他有趣的优势。 - George Mavritsakis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接