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缓存机制:
使用redis ,填写测试类----对应JPA的方法:
此时测试结果,第一次第二次调用时,是正确的,第三次不正确(上面设置了为20)
思考:
为什么同样的逻辑在EhCache中没有问题,但是到Redis中会出现这个问题呢?
在EhCache缓存时没有问题,主要是由于EhCache是进程内的缓存框架,第一次通过select查询出的结果被加入到EhCache缓存中,第二次查询从EhCache取出的对象与第一次查询对象实际上是同一个对象(可以在使用Chapter4-4-1工程中,观察u1==u2来看看是否是同一个对象),因此我们在更新age的时候,实际已经更新了EhCache中的缓存对象。
而Redis的缓存独立存在于我们的Spring应用之外,我们对数据库中数据做了更新操作之后,没有通知Redis去更新相应的内容,因此我们取到了缓存中未修改的数据,导致了数据库与缓存中数据的不一致。
因此我们在使用缓存的时候,要注意缓存的生命周期!!(利用注解做好缓存的更新删除)
解决方法:
在JPA中通过@CachePut来让数据及时更新操作同步到缓存中:
在redis-cli中flushdb,清空一下之前的缓存内容,再执行单元测试,可以得到正确结果:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。