在前面的文章《Jetcache缓存框架系列(一)jetcache缓存框架的基本使用》我们做了一下这个jetcache缓存框架的基本使用演示。但是大家发现一个问题没有,如果是纯查询,例如统计等页面的时候,我们用这个注解缓存比较符合对应的场景使用(缓存时间根据实际情况来判断)。但是在部分的业务场景里面,如果是用户信息的缓存,此时用户更新了自己的缓存,然后再用前面的getUserById接口查询的时候,我们就会发现,如果缓存没有过期的话,那么查询出来的还是缓存中的旧数据,不是数据库中的新数据。这时候数据在业务中应用就会出大问题。那此时我们怎么办呢?
其实就2个解决办法,分别是:
1、在更新完数据的时候删除缓存。 2、在更新完数据的时候更新缓存。
本文的话,我们介绍下第二个解决办法,在更新完数据的时候更新缓存。
这里更新缓存的时候,比较简单,我们使用@CacheUpdate这个注解接口,例如:
@CacheUpdate(name = "userCache:", key = "#user.id", value = "#user")
这里的注解就是当我们更新完缓存的时候,就会把这个注解执行一遍,此时缓存里面就是最新的数据了,然后我们用getUserById接口获取到的就是最新的数据了,下面我们来演示一下,完整的更新代码如下:
@RequestMapping("/updateuser") @CacheUpdate(name = "userCache:", key = "#user.id", value = "#user") public void updateUser(@RequestBody UserPoJo user) { log.info("更新新的用户信息"); userDao.updateById(user); }
然后我哦嗯再把项目启动起来。
首先我们使用getUserById接口获取到下对应的用户信息:
然后我们使用更新接口,把张三的电话号码修改下:
然后我们回到服务器日志的地方,看看日志:
可以看到执行了更新方法,然后我们回到数据库中查看张三的信息是否修改了:
已经修改了,然后我们再使用getUserById接口获取一下数据:
可以看到获取到了最新的数据,然后我们再去看看服务器的日志:
没有打印任何执行sql查询的日志,说明就是从缓存中获取到的最新值。
备注:
1、这里的更新,如果整个方法抛出了异常,那么我们更新数据库是不会成功的,当然这里的jetcache缓存框架也不会去更新缓存。
以上就是jetcache缓存框架更新缓存的部分,最后附上本案例的源码,登录后即可下载。
还没有评论,来说两句吧...