博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring boot + redis
阅读量:6589 次
发布时间:2019-06-24

本文共 702 字,大约阅读时间需要 2 分钟。

redis缓存

参照网址:
项目目录
D:testgitCloneSpringBoot-LearningChapter4-4-1
git地址:

注意事项:

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,清空一下之前的缓存内容,再执行单元测试,可以得到正确结果:
图片描述

你可能感兴趣的文章
JS常见的字符串操作
查看>>
洛谷P1069 细胞分裂 数学
查看>>
JAVA中的编码分析
查看>>
查看源代码Source not found及在eclipse中配置jdk的src.zip源代码
查看>>
document.all用法
查看>>
uniGUI试用笔记(二)
查看>>
HOG特征-理解篇
查看>>
Microsoft.AlphaImageLoader滤镜解说
查看>>
extjs_02_grid(显示本地数据,显示跨域数据)
查看>>
超过响应缓冲区限制
查看>>
ubuntu 下安装 matplotlib
查看>>
webservice的几个简单概念
查看>>
underscore 1.7.0 api
查看>>
C# CheckedListBox控件的使用方法
查看>>
spring Transaction Management --官方
查看>>
iOS开发-清理缓存功能的实现
查看>>
IS_ERR、PTR_ERR、ERR_PTR
查看>>
html5 canvas 奇怪的形状垂直渐变
查看>>
mac java环境
查看>>
lamp 一键安装
查看>>