视频

了解更多
Redis 智能缓存是一个开源库,可以无缝地将缓存添加到任何与 JDBC 兼容的平台、应用程序或微服务中。
缓存旁路是 Redis 开发人员为优化应用程序性能而实施的最常见的缓存模式。虽然缓存旁路在概念上很简单,但正确地实施它可能比看起来更困难、更容易出现故障并且更耗时。
为了遵循 Redis 宣言 的主要支柱——我们反对复杂性——我们开发了一个名为 Redis 智能缓存 的新解决方案,这是一个开源库,可以无缝地将缓存添加到任何使用与 JDBC 兼容的驱动程序连接到其系统记录的平台、应用程序或微服务中。
Redis 智能缓存允许开发人员识别性能最差的查询,动态启用查询缓存并观察持续的查询性能。所有这些都不需要更改任何代码。因此,您只需通过配置即可优化应用程序的性能,并利用 Redis 的速度和可靠性。
Redis 智能缓存对于优化要求苛刻的在线事务处理 (OLTP) 应用程序、数据仓库和分析工作负载非常有用。例如,您可以将智能缓存与 Tableau 集成,从而立即使实时仪表板更具响应性。
由于实践出真知,我们建议直接访问 Redis 智能缓存演示。您将在几分钟内运行智能缓存,并且您将亲眼看到您可以使用 Redis 速度的缓存旁路来快速优化应用程序。
通常,将 Redis 添加到应用程序(用于查询缓存)需要您更改源代码。在最简单的实现中,这些修改采用简单的 if 语句的形式。请考虑此伪代码实现的缓存旁路模式
if redis_cache.contains(query):
return redis_cache.get(query)
else:
result = backend_database.query(query)
redis_cache.put(query, result)
return result
但是,在实践中,这要复杂得多,特别是对于关键任务应用程序和微服务而言。
首先,您需要通过检查数据库的查询日志或咨询您的应用程序性能监控系统来发现哪些查询速度很慢。假设这些查询可以有效地进行缓存,那么您将需要将它们与生成它们的应用程序代码关联起来。找到每个查询的来源后,您可以实施缓存旁路模式。
此外,您还需要为 Redis 缓存设计一个键模式,并正确配置每个缓存查询的生存时间 (TTL)。不要忘记在需要的地方添加错误处理。确保结果集的序列化合理紧凑且高效也是值得的。如果您使用高级应用程序框架(例如 Spring Boot),则可以改用 一系列配置和注释 来启用缓存。
对于具有尖峰行为的业务案例,您需要考虑查询性能,包括季节性高峰使用、用户行为的变化以及对查询本身的维护更改。
最后,您需要进行测试。即使使用缓存注释,您也必须确保预期数据库查询确实按预期缓存。
以 Redis 宣言为指导原则,我们着手减少应用程序复杂性并提供有关流经基于 SQL 的驱动程序的查询的见解。我们还希望使开发人员能够轻松地更新缓存规则,以适应其数据访问模式的变化。
我们从在应用程序、微服务或第三方平台中实施 SQL 查询缓存的基本要求开始。
接下来,我们挑战自己以一种允许现有应用程序在不重构其代码的情况下添加 Redis 的方式来实现这些要求。换句话说,一个无需代码的解决方案,可以通过动态配置进行管理。
由于我们的大多数企业客户都使用 Java,因此我们首先扩展了 JDBC API,因为它充当大多数基于 JVM 的应用程序、微服务和第三方框架与 SQL 兼容数据库连接之间的桥梁。支持的数据库包括 Oracle、IBM DB2、Microsoft SQL Server、PostgreSQL 和 MySQL 等家喻户晓的名称,以及 Snowflake、BigQuery、Tableau 和其他支持与 JDBC 兼容的驱动程序的平台。
让我们想象一个现实世界的应用程序。假设您在一家部署了投资组合管理应用程序的投资经纪公司工作。
该应用程序有两个组件
如果此应用程序的性能没有达到可接受的服务级别协议 (SLA),并且数据访问模式使缓存成为可行的解决方案,那么工程团队可以编写必要的代码来解决问题。
这样做首先需要开发人员分析现有代码。研究如何使用 Redis 进行查询缓存并执行实际的编程。QA 团队将运行他们的负载测试,最后,应用程序准备投入生产。
根据应用程序中技术债务的数量,缓存旁路几个查询的努力可能并不糟糕。但是,如果以前的开发人员没有维护每个查询的准备语句的抽象层,或者这仅仅是众多微服务中的一个,那么它可能比分析之前看起来更棘手的项目。
累积的重构成本和比预期更长的项目时间表通常是这些计划失败的地方。直到用户体验变得无法忍受为止。
以下是一种替代方法。使用 Redis 智能缓存,您可以通过几个简单的步骤实现相同的结果
(对于生产部署,我们建议您咨询 Redis 智能缓存安装指南 以获取更多详细信息和配置选项。)
就这样。使用 Redis 智能缓存,无需代码分析,无需了解太多关于 Redis 的知识(尽管 我们建议您这样做,因为这是一项有益的活动),并且您可以避免技术债务,从而缩短上市时间。您甚至不必学习处理故障转移和雷群的最优方法。一切都已包含在内。简单!
Redis 智能缓存 CLI 是用于管理 Redis 智能缓存的命令行界面 (CLI)。虽然您可以完全使用 JDBC 属性 来配置智能缓存,但 CLI 允许您交互式地构建查询规则并动态应用新配置。
使用 CLI,您还可以查看应用程序的参数化查询或准备好的语句,以及每个查询的持续时间。Redis 智能缓存会捕获访问频率、平均查询时间、查询元数据和更多指标。这些指标通过预先构建的 Grafana 仪表板公开;包含的可视化效果可帮助您决定要应用哪些查询缓存规则。
找到要缓存的理想查询后,您可以使用 CLI 来暂存然后提交新的缓存配置。
例如,假设您要将针对 TRANSACTION_HISTORY 表发起的查询缓存最多 5 分钟。首先,您将在 CLI 中选择 创建查询 缓存规则,然后创建一个 匹配所有表 规则,提供表名(TRANSACTION_HISTORY)并添加 5 分钟的 TTL。
此新规则更改标记为待处理,直到您提交它。提交后,每个使用智能缓存库的应用程序实例都会使用新的配置并开始缓存与该规则匹配的查询。
首次安装智能缓存时,您不会在应用程序的行为中看到任何更改。这是设计使然。智能缓存会开始捕获记录系统的查询性能指标,但不会缓存任何查询,直到您明确决定要缓存哪些查询。
这是因为智能缓存实际上充当规则引擎。您创建的配置是缓存规则的集合。您可以构建每个查询的规则,这些规则与应用程序的精确参数化查询匹配,或者创建更通用的规则。
如上例所示,Smart Cache 甚至可以匹配包含特定表或一组表的查询。如果查询匹配和表匹配规则仍然不够细致,您也可以创建自己的正则表达式用于查询匹配。
要开始使用 Redis Smart Cache,请 遵循安装指南。Redis Smart Cache 核心库是开源的,可以与任何 Redis 部署一起使用。
要使用 CLI、分析或动态配置功能,您需要一个包含 Redis Stack 功能的 Redis 数据库。特别是,Smart Cache CLI 需要 搜索 和 时间序列。如果您无法自行或在生产环境中部署 Redis Stack,我们建议您使用 Redis Cloud 和 Redis Enterprise。
请随时 提交问题 以建议改进,并随时 联系我们寻求帮助。我们渴望帮助您,并且才刚刚开始!已经列入日程表的几个令人兴奋的功能,包括用于监控 Smart Cache 性能的增强型 Grafana 仪表板、规范性 TTL 和缓存失效协议以最大程度地减少陈旧数据的时段。
要了解有关使用 Redis Enterprise 进行查询缓存的更多信息,请参阅我们的 缓存解决方案概述。
衷心感谢我们敬业的现场工程师 Julien Ruaux 为构建 Redis Smart Cache JDBC 驱动程序核心而付出的努力,以及 Steve Lorello 为创建 Smart Cache CLI 而付出的努力。