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 相关文章推荐
为Java项目添加Redis缓存的方法
May 18 Redis
详解Redis瘦身指南
May 26 Redis
Redis源码阅读:Redis字符串SDS详解
Jul 15 Redis
Redis集群新增、删除节点以及动态增加内存的方法
Sep 04 Redis
Jedis操作Redis实现模拟验证码发送功能
Sep 25 Redis
基于Redis结合SpringBoot的秒杀案例详解
Oct 05 Redis
Redis高并发防止秒杀超卖实战源码解决方案
Nov 01 Redis
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
Feb 12 Redis
Redis 操作多个数据库的配置的方法实现
Mar 23 Redis
Redis基本数据类型String常用操作命令
Jun 01 Redis
Redis入门基础常用操作命令整理
Jun 01 Redis
Redis实战之Lettuce的使用技巧详解
Dec 24 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分享图片的生成方法
2018/04/25 PHP
Javascript 中 null、NaN和undefined的区别总结
2013/04/10 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
js截取字符串功能的实现方法
2017/09/27 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
Python简单遍历字典及删除元素的方法
2016/09/18 Python
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
解决pandas read_csv 读取中文列标题文件报错的问题
2018/06/15 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
django 信号调度机制详解
2019/07/19 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
2020/12/09 Python
Python页面加载的等待方式总结
2021/02/28 Python
Windows和Linux动态库应用异同
2016/04/17 面试题
数控技术专业推荐信
2013/11/01 职场文书
应用化学专业职业生涯规划书
2014/01/22 职场文书
浙大毕业生自荐信
2014/01/26 职场文书
班级口号大全
2014/06/09 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
2014年司机工作总结
2014/11/21 职场文书
安全先进班组材料
2014/12/26 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电