【Mycat1.6】缓存不生效问题处理

背景

系统做读写分离,有大量读需求,基本没有实时获取数据业务需要,所以可以启用缓存来减缓数据库压力,传统使用mybatis的缓存需要大量侵入式声明,所以结合需求使用Mycat中间件来满足

数据库结构

  • mysql-master:主库,含数据表test.table1
  • mysql-slave:从库,含数据表test.table1
  • mycat:开启一写两读,默认使用ehcache缓存

问题流程

  • 部署最新的Mycat1.6后,navicat进入8066,执行两次 select * from table1;
  • navicat进入9066控制台,执行show@@cache命令,发现hit一直为0

问题解决

  • 修改mycat的log级别为debug,查看日志中的SQLRouteCache

  • 定位到EnchachePool第77行中

    2023-09-06 11:00:09,221 [DEBUG][$_NIOREACTOR-5-RW] SQLRouteCache miss cache ,key:testselect * from table1 (io.mycat.cache.impl.EnchachePool:EnchachePool.java:77)

  • 下载源码并调试(过程略),发现查询语句并没有写入到缓存中,具体位置RouteService:

  • 问题出在rrs参数cacheAble默认为false,调试过程中没发现该参数有变化(估计是分库分表增加路由id后才会启动,暂不展开)

  • 根据我的需求,构造函数中默认改为true,即可解决问题

  • 重新打包jar包,替换线上/lib下的同名jar包,重启即可

最终效果

重新执行一遍操作,发现已经命中缓存,大功告成

相关推荐
达梦产品与服务8 分钟前
SQLark 实战 | 高频 SQL 脚本的导入、管理与复用
数据库·sql·数据库开发·数据库运维·脚本管理·sqlark百灵连接·sql脚本
InfinitePlus34 分钟前
redis数据持久化
数据库·redis·缓存
柒和远方1 小时前
V079: Milvus 向量数据库:AI 日记本的三组件部署、集合字段建模与余弦索引
javascript·sql
ClouGence2 小时前
数据库 CI/CD 再升级:CloudDM 4.1.0 支持多数据库发布流编排
数据库·sql·ci/cd
阿里云大数据AI技术2 小时前
一套 Spark SQL,打通多种 Catalog:EMR Serverless Spark 统一数据处理实践
人工智能·sql·spark
weixin_440730503 小时前
数据库缓存、索引、缓存命中率的理解
数据库·缓存
今天AI了吗6 小时前
从“金鱼脑”到“大象记忆”:AI Agent 短期记忆与长期记忆的存储与检索全解
数据库·人工智能·python·sql·rust
养生技术人6 小时前
Oracle OCP认证考试题目详解082系列第16题
数据库·sql·oracle·ocp
Elastic 中国社区官方博客7 小时前
驯服 PUNKs:ES|QL 如何查询 Elasticsearch 从未被告知的字段
大数据·sql·elasticsearch·搜索引擎·全文检索
taocarts_bidfans7 小时前
Taoify 站点缓存分层配置实操,解决海外访问卡顿与更新延迟
缓存·外贸独立站·taoify