spring boot + redis

redis缓存
参照网址:
http://blog.didispace.com/spr…
项目目录
D:testgitCloneSpringBoot-LearningChapter4-4-1
git地址:https://github.com/loqvliulia…

注意事项:
1:启动本地redis
2:实体类实现序列化,并生成UID

 (生成UID连接教程:http://www.cnblogs.com/qianzf/p/6811535.html)

测试Redis缓存机制:
《spring boot + redis》

使用redis ,填写测试类—-对应JPA的方法:
《spring boot + redis》

此时测试结果,第一次第二次调用时,是正确的,第三次不正确(上面设置了为20)
《spring boot + redis》

思考:
为什么同样的逻辑在EhCache中没有问题,但是到Redis中会出现这个问题呢?
在EhCache缓存时没有问题,主要是由于EhCache是进程内的缓存框架,第一次通过select查询出的结果被加入到EhCache缓存中,第二次查询从EhCache取出的对象与第一次查询对象实际上是同一个对象(可以在使用Chapter4-4-1工程中,观察u1==u2来看看是否是同一个对象),因此我们在更新age的时候,实际已经更新了EhCache中的缓存对象。
而Redis的缓存独立存在于我们的Spring应用之外,我们对数据库中数据做了更新操作之后,没有通知Redis去更新相应的内容,因此我们取到了缓存中未修改的数据,导致了数据库与缓存中数据的不一致。
因此我们在使用缓存的时候,要注意缓存的生命周期!!(利用注解做好缓存的更新删除)
解决方法:
在JPA中通过@CachePut来让数据及时更新操作同步到缓存中:
《spring boot + redis》
在redis-cli中flushdb,清空一下之前的缓存内容,再执行单元测试,可以得到正确结果:
《spring boot + redis》

    原文作者:crawler
    原文地址: https://segmentfault.com/a/1190000015279852
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞