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延迟队列和分布式延迟队列的简答实现
May 13 Redis
Redis基于Bitmap实现用户签到功能
Jun 20 Redis
嵌入式Redis服务器在Spring Boot测试中的使用教程
Jul 21 Redis
Redis中一个String类型引发的惨案
Jul 25 Redis
Redis字典实现、Hash键冲突及渐进式rehash详解
Sep 04 Redis
Redis高并发防止秒杀超卖实战源码解决方案
Nov 01 Redis
分布式架构Redis中有哪些数据结构及底层实现原理
Mar 13 Redis
Redis监控工具RedisInsight安装与使用
Mar 21 Redis
Redis超详细讲解高可用主从复制基础与哨兵模式方案
Apr 07 Redis
解决 redis 无法远程连接
May 15 Redis
Redis特殊数据类型bitmap位图
Jun 01 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
Smarty中调用FCKeditor的方法
2014/10/27 PHP
利用Laravel事件系统如何实现登录日志的记录详解
2017/05/20 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
Prototype Object对象 学习
2009/07/12 Javascript
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
Python与shell的3种交互方式介绍
2015/04/11 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
用python脚本24小时刷浏览器的访问量方法
2018/12/07 Python
详解python函数的闭包问题(内部函数与外部函数详述)
2019/05/17 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
2021/02/06 Python
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
暑假实习求职信范文
2013/09/22 职场文书
学校后勤人员职责
2013/12/27 职场文书
人事科岗位职责范本
2014/03/02 职场文书
连带责任保证书
2014/04/29 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
学校社会实践活动总结
2014/07/03 职场文书
2015年国际护士节演讲稿
2015/03/18 职场文书
大学同学聚会感言
2015/07/30 职场文书