简介
Readyset 是一种轻量级缓存解决方案,利用内存来存储缓存数据,实现复杂的 SQL 闪电般快速查询。
Readyset 介于应用程序和数据库之间,是一个Cache层。相当于Redis/Memcached的作用,但它不需要更改你的一行代码。
架构
Java/PHP应用程序 -> Readyset -> MySQL数据库
Readyset 的工作流程如下:
- 对于读操作:
- 您直接向 Readyset 发送 SQL 查询。
- 如果结果已缓存,Readyset 会即时返回,实现亚毫秒级响应。
- 若未缓存,Readyset 会将请求转发至后端数据库,获取结果后缓存并返回。
- 对于写操作(INSERT、UPDATE、DELETE):
- Readyset 会直接将请求转发至后端数据库执行,并相应更新其缓存。
Readyset 的优势在于:
- 使用标准 SQL 即可访问,无需学习新的查询语言
- 无需修改应用程序代码,只需更改数据库连接字符串
- 支持复杂 SQL 查询的高速缓存
- 自动保持缓存与数据库的一致性
- 可选择性地缓存高频查询,优化资源利用
这种设计使 Readyset 特别适合读密集型应用,能显著提升查询性能,同时保持操作的简便性和数据的最终一致性。
安装与使用
1.下载Readyset Docker 镜像
2.运行 Readyset 服务
注:UPSTREAM_DB_URL参数值填写后端MySQL的用户名,密码,IP地址,端口号,数据库名。
Readyset 暴露了两个端口: 3307 和 6034。 Readyset 进程将在 3307 端口监听查询流量,并通过 /metrics 端点在 6034 端口发送监控数据。
然后,Readyset 将连接到您的数据库,并复制指定的表(即所有表或明确定义的表)。 根据这些表的大小以及 Readyset 和数据库之间的网络连接情况,这可能需要几秒到几小时的时间。
要检查表格是否已导入,请执行以下操作:
当你看到:INFO replicators::noria_adapter: MySQL connected
代表已准备好开始缓存查询。
或者,你用MySQL客户端访问3307端口,执行SHOW READYSET STATUS命令:
查看该Snapshot Status
列。如果快照成功完成,它将报告Completed
。
现在 Readyset 已准备好开始缓存查询。
3.在 Readyset 中缓存查询
用MySQL客户端连接上3307端口(Readyset端口),将线上的慢SQL在 Readyset 里运行,并执行SHOW PROXIED QUERIES命令
观察readyset supported列,如果为Yes,代表该SQL支持缓存。如果值处于待定状态,请再次检查,直到看到是或否。 如果数值等待超过 15 秒,则不支持查询。
4.创建SQL缓存
要缓存查询,请使用:
这里以q_4c1cf3b8080fe634为例
5.查看缓存查询
6.测试
分别在 ReadySet 3307端口上,和后端MySQL端口上 ,执行刚才缓存的慢SQL,对比执行时间,你会发现缓存后的SQL秒级出结果。
初步测试表明,ReadySet 的有效性在第一次执行查询后,缓存机制可以充分发挥作用时就会变得非常明显。