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安装启动及常见数据类型
Apr 14 Redis
深入浅析Redis 集群伸缩原理
May 15 Redis
redis实现共同好友的思路详解
May 26 Redis
浅谈Redis的几个过期策略
May 27 Redis
比较几种Redis集群方案
Jun 21 Redis
浅析Redis Sentinel 与 Redis Cluster
Jun 24 Redis
Redis做数据持久化的解决方案及底层原理
Jul 15 Redis
解决Redis启动警告问题
Feb 24 Redis
Redis集群节点通信过程/原理流程分析
Mar 18 Redis
Redis特殊数据类型Geospatial地理空间
Jun 01 Redis
使用Redis实现分布式锁的方法
Jun 16 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 多个submit提交表单 处理方法
2009/07/07 PHP
coreseek 搜索英文的问题详解
2013/06/08 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
php网站被挂木马后的修复方法总结
2014/11/06 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
CI框架简单分页类用法示例
2020/06/06 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
解决vuex刷新状态初始化的方法实现
2019/08/15 Javascript
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
办理暂住证介绍信
2014/01/11 职场文书
护士长竞聘演讲稿
2014/04/30 职场文书
六一儿童节活动总结
2014/08/27 职场文书
树转促学习心得体会
2014/09/10 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
大学生敬老院活动总结
2015/05/07 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript