前台查询的结果字段不更新的问题排查

今天开发更新状态的一个功能,开发完后测试发现数据库里的字段值已经变了,但是前台仍显示的是以前的状态。
一开始以为是没更新成功,在数据库里仔细查了下确定是更改了状态,但是前台就是没有变化。
然后怀疑是前台查询的sql有问题,可能是没加相应的状态判断,于是文件里断点记录了下sql和查询结果,执行后发现sql没有问题,但是查询出来的结果里相应记录的状态没变。

呃,焦虑,这是什么情况啊...

接着怀疑是否是连错了数据库,不过这个直接被排除了,不可能的情况...

然后突然想到以前同事讲过的数据库缓存,于是搜索了下发现还真有这个功能。

MySQL cache功能分析:

1 MySQL的cache功能的key的生成原理是:把select语句按照一定的hash规则生成唯一的key,select的结果生成value,即key=>value。所以对于cache而言,select语句是区分大小写的,也区分空格的。两个select语句必须完完全全一致,才能够获取到同一个cache。

2 生成cache之后,只要该select中涉及到的table有任何的数据变动(insert,update,delete操作等),相关的所有cache都会被删除。因此只有数据很少变动的table,引入MySQL 的cache才较有意义。

使用场景:

MySQL的cache功能只适用于下列场合:数据变动较少,select较多的table。

执行下面的命令

show variables like '%query_cache%';

结果如下图:

可以看出来确实是开启了cache功能,但是这个缓存要求查询的sql必须要写SQL_CACHE,看了下php文件里并没有用到这个SQL_CACHE,应该不是这个缓存的,同样也排除了。

没办法,从最底层看吧。检查Mysql类文件,发现里面增加了memcache的处理,看了下代码,应该是memcache缓存了sql结果,至此困扰了快一下午的问题找到了原因。

标签: mysql

添加新评论