redis数据一致性的实现示例


Posted in Redis onMarch 18, 2022

前言

所谓的redis数据一致性即当进行修改或者保存、删除之后,redis中的数据也应该进行相应变化,不然用户再次查询的时候很可能查询出已经删除过的脏数据。

一、缓存一致的必要性

还是接上篇来说,我们已经解决了redis缓存穿透的问题(简单解决方案,可以再次优化),但是使用redis的时候缓存一致性的问题我们也需要着重考虑,例如:保存了一个新用户之后,就应该同时在redis缓存中也插入该条数据,更新了某条数据在缓存中也应该同步更新,而redis默认的做法是:当你不去设置的时候redis中存放的一值是你之前存放的数据,只有在重启服务器的时候数据才会同步,显然这是非常不可取的,如果是这样的话岂不是每时每刻都要重启服务器,那将是多么大的灾难!

二、业务场景

这里我只说一个场景吧,其他场景都是一样的处理办法,场景为:假设我们将用户数据放入到redis中,此时有新用户注册,在数据库中会插入一条新数据,与此同时要在redis中也插入该条数据,以便于下次查询的时候显示最新数据。

我们先来看一下默认不使用任何处理的情况下redis是否会为我们做一致性操作,现在我的测试数据库中有18条用户数据,此时我们启动系统后注册插入第19条数据后看下redis中是否有19条。

redis数据一致性的实现示例

经过注册之后我现在给数据库中插入了第19条数据

redis数据一致性的实现示例

接着我们还是使用上篇提到过的查询缓存的方法来获取下所有信息,我们直接来看第最后一条,可以看到最后是润青而不是十九,所以redis默认是没有替我们做缓存一致操作的。

redis数据一致性的实现示例

三、缓存一致性实现(方案1)

其实,要想实现一致性很简单,当我们在进行插入操作之后,我们把该条数据取出来同时保存到redis缓存中去,这样再次查询缓存的时候我们也可以看到新的数据,代码如下:

redis数据一致性的实现示例

需要注意的是:我这里直接是调用JPA的findAll(),其实更好的做法是根据id去更新刚插入的那一条,这样效率才高,这里只是演示如何实现,接着再来注册一条新数据,看看是否可以在缓存中同时看到:新插入的数据id为29,我们来看下缓存是否存在该条新数据

redis数据一致性的实现示例

redis数据一致性的实现示例

四、redis缓存一致性实现(方案2)

定期清除redis中的数据,例如设置一个定时任务,每当一个小时的时候就会清除redis中的数据,也就是让redis中的数据失效,然后再次保存、删除的时候之前的 redis中的数据已经不存在,所以相当于是将数据重新设置到redis中去,所以可以保证数据的一致性。

到此这篇关于redis数据一致性的实现示例的文章就介绍到这了,更多相关redis数据一致性内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Redis 相关文章推荐
Redis IP地址的绑定的实现
May 08 Redis
Redis 配置文件重要属性的具体使用
May 20 Redis
Django使用redis配置缓存的方法
Jun 01 Redis
Redis性能监控的实现
Jul 09 Redis
基于Redis的List实现特价商品列表功能
Aug 30 Redis
redis击穿 雪崩 穿透超详细解决方案梳理
Mar 17 Redis
Redis集群节点通信过程/原理流程分析
Mar 18 Redis
使用Redis实现点赞取消点赞的详细代码
Mar 20 Redis
Redis中key的过期删除策略和内存淘汰机制
Apr 12 Redis
Redis基本数据类型哈希Hash常用操作命令
Jun 01 Redis
一文教你快速生成MySQL数据库关系图
Jun 28 Redis
如何使用注解方式实现 Redis 分布式锁
Jul 23 Redis
高并发下Redis如何保持数据一致性(避免读后写)
Mar 18 #Redis
redis击穿 雪崩 穿透超详细解决方案梳理
Redis调用Lua脚本及使用场景快速掌握
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
Redis中有序集合的内部实现方式的详细介绍
Mar 16 #Redis
面试分析分布式架构Redis热点key大Value解决方案
You might like
PHP与MySQL交互使用详解
2006/10/09 PHP
PHP 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
使用coffeescript编写node.js项目的方法汇总
2015/08/05 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
[01:01:01]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第一场 10.29
2020/10/29 DOTA
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
详解Python验证码识别
2016/01/25 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
iPython pylab模式启动方式
2020/04/24 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
模范教师事迹材料
2014/02/10 职场文书
房租涨价通知
2015/04/23 职场文书
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS