了解 Web 缓存 (Redis)

Posted

技术标签:

【中文标题】了解 Web 缓存 (Redis)【英文标题】:Understanding web caching (Redis) 【发布时间】:2016-01-14 12:11:17 【问题描述】:

我正在开发一个从 API 提供程序接收数据的网络应用程序。现在我需要一种方法来缓存数据以保存,以免再次为相同的数据调用提供程序。

然后我偶然发现了 Redis,它似乎符合我的目的,但我对使用 Redis 进行缓存的概念并不是 100% 清楚。我检查了他们的文档,但我并没有真正理解他们所说的话。

假设我刚刚部署了我的网站,并且我的第一个访问者叫 A。由于 A 是第一个访问的人,我的网站将通过 API 提供程序请求一组新数据,几秒钟后,页面将加载 A 想要的数据。

我的网站将此数据缓存到 Redis,以便为将来访问同一页面的访问者提供服务。

现在我有了第二个访客 B。

B 访问与 A 相同的页面 url,并且由于我的网站将此数据存储在缓存中,因此 B 从缓存中提供服务,并且加载时间将比 A 所经历的快得多。

我的理解符合网络缓存的概念吗?

我一直认为缓存是基于用户的,所以我在网站上的交互对其他人没有任何影响,但 Redis 似乎在每个应用程序的基础上工作。

【问题讨论】:

【参考方案1】:

是的,您对 Web 缓存的理解是正确的,但它可能会变得更加复杂,具体取决于您的用例。 Redis 本质上是一个键值对存储。因此,如果您想要应用程序级缓存,您的理论键/值对应如下所示:

key: /path/to/my/page
value: <html><...whatever...></html>

如果您想要用户级缓存,您的理论密钥只会稍微改变:

key: visitorA|/path/to/my/page
value: <html><...whatever...></html>

有意义吗?本质上,键中有一个标签来定义用户(但它通常是哈希或其他东西,而不是纯文本字符串)。

有为不同的 Web 开发框架和内容管理系统编写的 redis 客户端库,它们将定义它们如何处理缓存(即特定于用户或特定于应用程序)。如果您正在编写自定义 Web 应用程序,那么您可以选择应用程序级缓存或用户级缓存,然后对缓存执行任何其他操作。

【讨论】:

感谢您花时间解释这一点。这很有帮助。应用程序级缓存是 Web 更常见的选择吗?这些选择的优缺点是什么? 我猜应用程序级缓存更常见,因为它通常比用户级缓存提供更好的性能改进。只有让同一个用户一遍又一遍地访问同一个资源密集型页面时,用户级缓存才真正有效。应用程序级缓存更简单,您可以获得显着的缓存优势(因为所有用户都受益);但是,一旦用户之间的内容不同,您就必须使用用户级缓存。您也可以按页面部分缓存,其中一些 div 为所有用户缓存,一些是特定于用户的。希望有帮助! 还有其他类型的缓存可以加快速度。例如,php 具有 APC 缓存,这是代码本身的字节码级缓存,可以轻松地将延迟减少一半,同时允许用户特定的体验。真的很容易使用,还有很多其他的。 谢谢。它帮助很大。

以上是关于了解 Web 缓存 (Redis)的主要内容,如果未能解决你的问题,请参考以下文章

Nginx+Redis 搭建高性能缓存利器

Web 开发后端缓存思路

带你100% 地了解 Redis 6.0 的客户端缓存

带你100% 地了解 Redis 6.0 的客户端缓存

Web性能优化-ReponseCaching

带你100% 地了解 Redis 6.0 的客户端缓存