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 08 Redis
浅谈Redis的几个过期策略
May 27 Redis
你真的了解redis为什么要提供pipeline功能
Jun 22 Redis
Redis 彻底禁用RDB持久化操作
Jul 09 Redis
redis 存储对象的方法对比分析
Aug 02 Redis
Redis分布式锁Redlock的实现
Aug 07 Redis
Springboot/Springcloud项目集成redis进行存取的过程解析
Dec 04 Redis
聊聊redis-dump工具安装问题
Jan 18 Redis
redis数据结构之压缩列表
Mar 21 Redis
Redis基本数据类型Set常用操作命令
Jun 01 Redis
关于Redis的主从复制及哨兵问题
Jun 16 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 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
PHP 一个页面执行时间类代码
2010/03/05 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
浅谈函数调用的不同方式,以及this的指向
2017/09/17 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
Python方法的延迟加载的示例代码
2017/12/18 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
pycharm 在windows上编辑代码用linux执行配置的方法
2018/10/27 Python
简单了解Python生成器是什么
2019/07/02 Python
linux环境中没有网络怎么下载python
2019/07/07 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
python创建子类的方法分析
2019/11/28 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
sklearn的predict_proba使用说明
2020/06/28 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
Python实现哲学家就餐问题实例代码
2020/11/09 Python
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
JAKO-O德国野酷台湾站:德国首屈一指的婴幼童用品品牌
2019/01/14 全球购物
Etam德国:内衣精品店
2019/08/25 全球购物
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
求职简历自荐信
2014/06/18 职场文书
代理人委托书
2014/09/16 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js