资讯专栏INFORMATION COLUMN

spring boot + redis

crossea / 2260人阅读

摘要:而的缓存独立存在于我们的应用之外,我们对数据库中数据做了更新操作之后,没有通知去更新相应的内容,因此我们取到了缓存中未修改的数据,导致了数据库与缓存中数据的不一致。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71201.html

相关文章

  • java | Spring BootRedis 实现 Cache 以及 Session 共享

    摘要:完成状态编写中已完成维护中原文是一个使用编写的开源支持网络基于内存可选持久性的键值对存储数据库维基百科是目前业界使用广泛的基于内存的数据库。 完成状态 [ ] 编写中 [ ] 已完成 [x] 维护中 原文 Redis Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库 ------ 维基百科 Redis 是目前业界使用广泛的基于内存的...

    ssshooter 评论0 收藏0
  • 一起来学SpringBoot | 第九篇:整合Lettuce Redis

    摘要:相比它支持存储的类型相对更多字符哈希集合有序集合列表,同时是线程安全的。基于的连接实例,可以在多个线程间并发访问,且线程安全,满足多线程环境下的并发访问,同时它是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。 SpringBoot 是为了简化 Spring 应用的创建、运行、调试、部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML...

    yacheng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<