背景:公司又到谷歌的cache。我在数据库直接修改数据并没用,需要重启项目才可以,或者是通过管理后台页面操作才有效,然后我就去查了相关资料
资料说这个com.goolgle.common.cache.Cache包里的方法是将一些量少但经常使用到的数据获取后放在本地内存中
然后我自己有三个不太确定的地方,网上还找不到想要的答案
1:本地内存是放在虚拟机里面吗,当虚拟机重启时第一次查询时就会获取数据库中最新的数据吗
2:idea重启tomcat的时候虚拟机就是重启了吗
3:因为直接数据库修改不行,但是通过页面操作调用后台接口就有效。说明虚拟机本地内存中的数据是不能通过数据库修改的吗
下面是最后从好友处得到的答案:
1、Guava的cache里面的数据是放在受虚拟机管理的本地内存里面, 当虚拟机重启时第一次查询时不一定就会获取数据库中最新的数据吗,要看看你们代码里面具体是怎么用Cache,常见的有除了首次使用全量加载这样使用之外,还可以在在每次查询特定的时候,发现数据不再缓存里面,再从数据库里面加载
2、是的
3、虚拟机内存的数据是可以理解为基于Java代码修改的,数据库只是一个数据容器,不是一个修改手段,
上面现象的原因是,通过页面操作调用后台接口,后台接口的实现逻辑里面是触发数据库里面的数据修改的同时,也修改了cache里面的数据,而页面查询的数据的实现逻辑里面估计是有先查询cache里面的数据,所以直接手工改数据,会看起来页面查询结果不变。
具体实现要看看你们怎么使用cache的
然后再回过来看项目代码,发现后台在执行修改、新增或者删除代码的时候有一个清缓存的步骤,所以是有了这个清缓存的操作所以数据修改或者增加后本地内存会读取最新的数据。如果我是数据库直接修改数据因为没触发这个清缓存操作所以就还是旧数据。