mysql查询缓存是基于什么粒度?
mysql数据库查询缓存原理是:
1、缓存SELECT操作的结果集和SQL语句,key为sql,value为查询结果集;
2、如果新的SELECT语句到了,以这个sql为key去缓存中查询,如果匹配,就把缓存的结果集返回。
图片来源:网络
匹配标准:与缓存的SQL语句是否完全一样,sql中字母区分大小写以及中间的空格,简单理解为存储了一个key-value结构,key为sql,value为sql查询结果,匹配时使用Java的String的equals(),例如:
select age from user 与 select AGE from user不会匹配,因为大小写不同;
select age from use 与 select age from user不会匹配,因为空格不同;
如何用redis/memcache做Mysql缓存层?
应用层更改的话那个工作量肯定大,但是如果把redis加在服务层那不就是一劳永逸了。所以推荐你先去学习一下redis的数据类型和使用方式,入门大概在一天左右,然后就可以整合到项目里面开始用了。
你的想法是正确的,以前没有换成组件时,为了提升速度,我们就是简单的实现:每次读db时缓存map中,下次同key直接读map;db表发生RUD则清除map。现在的缓存组建做的都比较好,你说的memcache和redis使用的场景还是需要考虑下。若是仅自模块用,建议memcache,已经与Java集成非常好,基本不用考虑代码,配置下就差不多了。若是多模块用,建议redis,但缓存逻辑还是需要自己设计实现。或者你二者都使用,在不同的合适的业务场景下。若是在原有代码上增加缓存,那是需要好好设计,比较要保证现业务的兼容性和正确性及完整性。缓存毕竟与db间有个时差,需要充分考虑一致性问题。