MySQL查询缓存(query_cache_size)的开启和redis缓存的取舍

使用Redis有几个月了,无微在此做点小笔记,顺便对之前不完整的redis缓存方案进行适当补充。
在使用redis进行数据库缓存和MySQL自带查询缓存具有一致性,又有区别。
首先redis缓存可以做持久化,也就是说可以硬保存数据库相询记录,而MySQL自带查询缓存重启后丢失需要重新生成,这点差异很重要,涉及冷启动需要的时间差异。

其次,MySQL查询缓存(query_cache_size)的开启和redis缓存都上内存级缓存,执行速度上看并没明显差异,有一定的类似性和相同性。所以说,这两种缓存方案都是可取的。

MySQL5.7以下版本可以设置缓存,但MySQL8.0已经取消了查询缓存,原因就是MySQL查询缓存既有优点又有缺点。优点如上所说就是保存的查询记录,SQL语句可以直接从Query Cache中获得查询结果,这样就减少数据库查询的执行时间。缺点包括会增加检查和清理Query Cache中记录集的开销等,而且存在SQL语句缓存的表,每一张表都只有一个对应的全局锁。

由上,使用php_redis扩展将sql查询直接缓存到数据库中是一种高效的方法。

附:
MySQL查询缓存的开启和关闭
query_cache_type=0 关闭查询缓存功能
query_cache_type=1 启用查询缓存,只要符合查询缓存的要求,客户端的查询语句和记录集斗可以缓存起来,共其他客户端使用
query_cache_type=2 启用查询缓存,只要查询语句中添加了参数:sql_cache,且符合查询缓存的要求,客户端的查询语句和记录集,则可以缓存起来,共其他客户端使用

MySQL查询缓存的大小设置
query_cache_size并不是越大越好, 查询缓存的命中率就越高,值过大甚至增加服务器的负载。一般推荐为64M,或根据实际生产环境测试更好的值。

MySQL查询缓存区的碎片整理
查询缓存使用一段时间之后,一般都会出现内存碎片,需要定期进行内存碎片的整理。
碎片整理的操作语句:FLUSH QUERY CACHE;
清空查询缓存的数据: RESET QUERY CACHE;

综上所述,MySQL查询缓存(query_cache_size)的开启和redis缓存的取舍可以根据生产环境的数据查询特点灵活地选取。

#现在前往

精选留言

缓存,MySQL,查询,query
sample
2021-05-18
写留言
签到
投稿
QQ咨询
返回顶部