dot Redis 8 发布了——而且是开源的

了解更多

Redis Cache-Aside 模式简化指南

Redis Smart Cache 是一个开源库,它可以无缝地为任何符合 JDBC 标准的平台、应用或微服务添加缓存功能。

Cache-aside(旁路缓存)是 Redis 开发者为优化应用性能而实现的最常见的缓存模式。虽然 Cache-aside 概念上很简单,但正确实现它可能比看起来更困难、更容易出现故障且耗时。

秉承 Redis 宣言 的一项主要原则——我们反对复杂性——我们开发了一种新解决方案,称为 Redis Smart Cache,这是一个开源库,可以无缝地为任何使用符合 JDBC 标准的驱动程序连接其记录系统的平台、应用或微服务添加缓存功能。 

Redis Smart Cache 允许开发者识别性能最差的查询,动态启用查询缓存,并观察持续的查询性能。这一切都无需更改任何代码。因此,您只需通过配置即可优化应用性能,并利用 Redis 的速度和可靠性。

Redis Smart Cache 对于优化高要求的在线事务处理 (OLTP) 应用、数据仓库和分析工作负载非常有用。例如,您可以将 Smart Cache 与 Tableau 集成,立即使实时仪表板响应更迅速。

在 Tableau 中配置的 Redis Smart Cache,用于实时可视化和报告。

实践出真知,我们建议直接查看 Redis Smart Cache 演示。您将在几分钟内启动并运行 Smart Cache,并亲身体验如何在 Redis 速度下快速使用 cache-aside 模式优化应用。

我们为何创建 Smart Cache

通常,将 Redis 添加到应用中进行查询缓存需要更改源代码。在最简单的实现中,这些修改采用简单的 if 语句形式。请考虑 Cache-aside 模式的伪代码实现

if redis_cache.contains(query):
   return redis_cache.get(query)
else:
   result = backend_database.query(query)
   redis_cache.put(query, result)
   return result

然而,在实践中,这要复杂得多,特别是对于关键任务应用和微服务。

首先,您需要通过检查数据库的查询日志或咨询您的应用性能监控系统来发现哪些查询很慢。假设这些查询可以有效地缓存,您 then 需要将它们与生成它们的应用程序代码关联起来。一旦找到每个查询的来源,就可以实现 cache-aside 模式。

此外,您还需要为 Redis 缓存设计键模式,并正确配置每个缓存查询的生存时间 (TTL)。别忘了在需要的地方添加错误处理。确保结果集的序列化合理紧凑且性能良好也是值得的。如果您正在使用高级应用框架,例如 Spring Boot,您可以通过一系列配置和注解来启用缓存。

对于具有峰值行为的业务场景,您需要在季节性高峰使用、用户行为变化以及查询本身的维护更改期间考虑查询性能。

最后,您需要进行测试。即使使用了缓存注解,您也必须确保预期的数据库查询确实按照预期被缓存了。

Redis Smart Cache 可以简化流程

以 Redis 宣言为指导原则,我们着手减少应用复杂性,并提供关于流经基于 SQL 的驱动程序的查询的洞察。我们还希望赋能开发者,使其能够随着数据访问模式的变化轻松更新缓存规则。

我们从在应用、微服务或第三方平台中实现 SQL 查询缓存的基本要求开始。

Identify slow queries; cache the SQL query and its result set with expiration managed by an eviction policy, TTL, and/or invalidation protocol; handle failover, stampede, and (re)hydration scenarios; provide observability; (crossed-out) find excuses to use generative AI.

接下来,我们挑战自己以一种允许现有应用在不重构代码的情况下添加 Redis 的方式实现这些要求。换句话说,一个无需编写代码的解决方案,完全可以通过动态配置进行管理。 

由于我们的大多数企业客户都使用 Java,我们首先扩展了 JDBC API,因为它在大多数基于 JVM 的应用、微服务和第三方框架与符合 SQL 标准的数据库之间充当桥梁。支持的数据库包括 Oracle、IBM DB2、Microsoft SQL Server、PostgreSQL 和 MySQL 等知名数据库,以及 Snowflake、BigQuery、Tableau 和其他支持符合 JDBC 标准驱动程序的平台。

您为何需要它?

让我们想象一个现实世界的应用。假设您在一家投资经纪公司工作,该公司部署了一个投资组合管理应用。

该应用有两个组成部分

  • 由 Spring Boot 提供支持的 API
  • 一个关系型数据库——例如 Oracle
an illustration showing reads and writes
在这个假设场景中,应用的所有查询都通过 Oracle JDBC 驱动程序由 Oracle 提供服务。

如果该应用性能不符合可接受的服务水平协议 (SLA),并且数据访问模式使得缓存成为一个可行的解决方案,工程团队可以编写必要的代码来解决问题。

这样做首先需要开发者分析现有代码。研究如何使用 Redis 进行查询缓存并进行实际编程。质量保证团队将运行负载测试,最后,应用即可投入生产。 

根据应用的技术债务量,对几个查询进行 cache-aside 的工作可能并不糟糕。但是,如果之前的开发者没有为每个查询的预处理语句维护一个抽象层,或者这只是众多微服务之一,那么这可能是一个比最初分析时看起来更棘手 Project。

累积的重构成本和超出预期的项目时间表通常是这些计划失败的地方。直到用户体验变得无法忍受为止。

Smart Cache 工作原理

还有另一种选择。使用 Redis Smart Cache,您可以通过几个简单的步骤实现同样的结果

  1. redis-smart-cache-jdbc 库添加为应用依赖项。
  1. 配置应用以使用 Smart Cache 的 JDBC 驱动程序。
  2. 配置 Smart Cache 属性文件,指定记录系统相应的 JDBC 驱动程序。例如,如果您使用 Oracle,则配置 Smart Cache 使用 oracle.jdbc.OracleDriver,并提供该数据库的 JDBC URI。
  3. 配置 Smart Cache 属性文件,指定您的 Redis 端点。

(对于生产部署,我们建议查阅 Redis Smart Cache 安装指南 以获取更多详细信息和配置选项。) 

就是这样。使用 Redis Smart Cache,无需代码分析,无需深入学习 Redis(尽管我们推荐将其作为一项有价值的活动),而且可以避免技术债务,从而缩短上市时间。您甚至无需学习处理故障转移和惊群效应的最佳方法。这一切都已集成其中。简单至上!

an illustration of Redis and Spring Boot JDBC Driver
Redis Smart Cache 包装了应用现有的 JDBC 驱动程序,并将开销较大的查询缓存在 Redis 中。现在,查询由 Redis 和原始记录系统共同提供服务。

如何使用 Smart Cache CLI 启用缓存

Redis Smart Cache CLI 是用于管理 Redis Smart Cache 的命令行界面 (CLI)。虽然您可以使用 JDBC 属性 完全配置 Smart Cache,但 CLI 允许您交互式构建查询规则并动态应用新配置。 

通过 CLI,您还可以查看应用参数化查询(或预处理语句)以及每个查询的持续时间。Redis Smart Cache 捕获访问频率、平均查询时间、查询元数据以及其他指标。这些指标通过预构建的 Grafana 仪表板暴露出来;其中包含的可视化图表可帮助您决定应用哪些查询缓存规则。 

a grafana dashboard
此 Grafana 仪表板包含在 Redis Smart Cache 中,显示启用缓存前后的查询性能。

一旦您确定了理想的缓存查询,您就可以使用 CLI 来暂存并提交新的缓存配置。 

例如,假设您想缓存针对 TRANSACTION_HISTORY 表发起的所有查询,最长缓存时间为五分钟。首先,从 CLI 中选择 create query caching rule,然后创建 match-any table 规则,提供表名 (TRANSACTION_HISTORY),并添加 5m 的 TTL。 

这种新的规则更改在您提交之前会被标记为 待处理。一旦提交,使用 Smart Cache 库的每个应用实例都会使用新配置,并开始缓存符合此规则的查询。

创建缓存规则

当您首次安装 Smart Cache 时,不会看到应用行为有任何改变。这是有意为之。Smart Cache 会开始捕获记录系统的查询性能指标,但直到您明确决定缓存哪些查询时,它才会进行缓存。

这是因为 Smart Cache 实际上作为规则引擎运行。您创建的配置是一系列缓存规则。您可以构建每个查询的规则,该规则匹配应用的精确参数化查询,或者创建更通用的规则。

如上面的示例所示,Smart Cache 甚至可以匹配所有包含特定表或一组表的查询。如果查询匹配和表匹配规则仍然不够精细,您还可以创建自己的正则表达式用于查询匹配。

后续步骤

要开始使用 Redis Smart Cache,请遵循安装指南。Redis Smart Cache 核心库是开源的,可与任何 Redis 部署一起使用。 

要使用 CLI、分析或动态配置功能,您需要一个包含 Redis Stack 功能的 Redis 数据库。特别是,Smart Cache CLI 需要 搜索时间序列 功能。如果您无法自行部署或在生产环境中部署 Redis Stack,我们推荐使用 Redis CloudRedis Enterprise

请随时提交问题提出改进建议,也请随时联系我们寻求帮助。我们非常乐意提供帮助,并且刚刚起步!已经列入计划的还有许多令人兴奋的功能,包括增强的 Grafana 仪表板用于监控 Smart Cache 的性能、规定性 TTL 以及缓存失效协议,以最大限度地减少陈旧数据的时间窗口。

要详细了解使用 Redis Enterprise 进行查询缓存,请参阅我们的缓存解决方案概述。 


非常感谢我们的专业现场工程师 Julien Ruaux 构建了 Redis Smart Cache 核心 JDBC 驱动程序,以及 Steve Lorello 创建了 Smart Cache CLI。