redis的延迟双删策略
1,redis数据为什么会存在和数据库数据不一致的问题
在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,
修改请求的实现中需要修改数据库后,级联修改redis中的数据。
请求一:1.1修改数据库数据		1.2 修改redis数据
请求二:2.1修改数据库数据		2.2 修改redis数据
并发情况下就会存在1.1 ---> 2.1 ---> 2.2 ---> 1.2的情况
此时存在的问题就是:
	1.1修改数据库的数据最终保存到了redis中,2.1在1.1之后也修改了数据库数据。
	此时出现了redis中数据和数据库数据不一致的情况,在后面的查询过程中就会长时间去先查redis,
	从而出现查询到的数据并不是数据库中的真实数据的严重问题。
2.单删策略为什么不能解决数据一致性问题
上面的单删策略情况如下:
修改请求的实现中需要修改数据库后,级联删除redis中的数据。
请求一:1.1修改数据库数据		1.2 删除redis数据
请求二:2.1修改数据库数据		2.2 删除redis数据
假设现在并发存在一个查询请求
请求三:3.1查询redis中数据   3.2查询数据库数据    3.3 新查到的数据写入redis
(一定要理解带redis的查询请求实现逻辑,先查redis,数据不存在查数据库,
			查到的数据写入redis以便以后的查询不去直接查数据库)
			
此时并发情况下就会存在1.1 ---> 1.2 ---> 3.1 ---> 3.2 ---> 2.1 ---> 2.2 ---> 3.3的情况
此时存在的问题就是:
	此时数据库中的数据保存的是2.1修改后的数据,而redis中保存的数据是3.2中在1.1修改数据后的结果,
	此时出现了redis中数据和数据库数据不一致的情况,在后面的查询过程中就会长时间去先查redis,
	从而出现查询到的数据并不是数据库中的真实数据的严重问题。
3.延迟双删为什么会确保数据一致性
添加延时双删策略后的情况
请求一:1.1修改数据库数据		1.2 删除redis数据    1.3 延时3--5s再去删除redis中数据
请求二:2.1修改数据库数据		2.2 删除redis数据    2.3 延时3--5s再去删除redis中数据
请求三:3.1查询redis中数据     3.2 查询数据库数据    3.3 新查到的数据写入redis
双删策略为什么能解决问题:
因为存在了延时时间,故1.3或2.3 一定是最后执行的一步操作(并发中的延时一定要理解)
延时的根本目的就是为了让程序先把3.3执行完,再去删除redis,这个延时的时间取决于读操作的时间来设定
redis的延迟双删策略的更多相关文章
- Redis与Mysql双写一致性方案解析
		一 前言 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用.在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作 但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存 ... 
- Redis数据过期和淘汰策略详解(转)
		原文地址:https://yq.aliyun.com/articles/257459# 背景 Redis作为一个高性能的内存NoSQL数据库,其容量受到最大内存限制的限制. 用户在使用Redis时,除 ... 
- Redis(二十):Redis数据过期和淘汰策略详解(转)
		原文地址:https://yq.aliyun.com/articles/257459# 背景 Redis作为一个高性能的内存NoSQL数据库,其容量受到最大内存限制的限制. 用户在使用Redis时,除 ... 
- Redis 数据结构与内存管理策略(上)
		Redis 数据结构与内存管理策略(上) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ... 
- Redis 响应延迟问题排查
		计算延迟时间 如果你正在经历响应延迟问题,你或许能够根据应用程序的具体情况算出它的延迟响应时间,或者你的延迟问题非常明显,宏观看来,一目了然.不管怎样吧,用redis-cli可以算出一台Redis 服 ... 
- redis学习笔记——Redis过期键的删除策略
		Redis过期键的删除策略 对于过期键一般有三种删除策略 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作: 惰性删除:放任键过期 ... 
- Redis 键的过期删除策略及缓存淘汰策略
		前言 Redis缓存淘汰策略与Redis键的过期删除策略并不完全相同,前者是在Redis内存使用超过一定值的时候(一般这个值可以配置)使用的淘汰策略:而后者是通过定期删除+惰性删除两者结合的方式进行内 ... 
- 动手实现 LRU 算法,以及  Caffeine 和 Redis 中的缓存淘汰策略
		我是风筝,公众号「古时的风筝」. 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面. 那天我在 LeetCode 上刷到一道 LRU 缓存机制的问题, ... 
- Redis的过期键删除策略
		文章首发于公众号:蘑菇睡不着,欢迎来看看 前言 Redis 中都是键值对的存储形式,键都是字符串类型的,而值有很多种类型,如 string.list.hash.set.sorted set等类型.当设 ... 
- Redis++:Redis 内存爆满 之 淘汰策略
		前言: 我们的redis使用的是内存空间来存储数据的,但是内存空间毕竟有限,随着我们存储数据的不断增长,当超过了我们的内存大小时,即在redis中设置的缓存大小(maxmeory 4GB),redis ... 
随机推荐
- windows 程序启动后挂到后台
			开发中遇到一个问题,程序启动后,并没有出现在前台,而是自动挂到后台,程序处于卡死状态,基本任何模块都没加载进来. 后面排查发现跟一个功能的第三方 dll 有关系,在那个 dll 加载时导致程序卡死,因 ... 
- win32 - IFolderView2::GetCurrentFolderFlags的使用
			网上关于IFolderView2接口调用的示例有点少. 下面的例子是将桌面的图标隐藏起来,使用了FWF_NOICONS样式. #include <ShlObj.h> // Shell AP ... 
- [WEB安全] XSS攻击防御  Vue
			一.概念 XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序. 这些恶意网页程序通常是JavaScript,但实际上也可以 ... 
- 如何拓展jwt返回的数据
			默认的返回值仅有token,我们还需在返回值中增加username和id,方便在客户端页面中显示当前登陆用户 通过修改该视图的返回值可以完成我们的需求. 在user/utils.py中,创建 def ... 
- 通过命令修改git提交的注释信息
			1.修改最新一条 commit 注释信息 通过 git commit --amend 命令修改注释信息,然后:wq 进行保存,再重新提交 2. 修改多条 commit 注释信息 输入命令:git re ... 
- 05、etcd 读请求执行流程
			本篇内容主要来源于自己学习的视频,如有侵权,请联系删除,谢谢. 1.etcd读请求概览 etcd是典型的读多写少存储,在我们实际业务场景中,读一般占据2/3以上的请求.一个读 请求从client通过R ... 
- JS中Date和时间戳转换
			<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ... 
- 一文上手图数据备份恢复工具 NebulaGraph BR
			作者:NebulaGraph 工程师 Kenshin NebulaGraph BR 开源已经有一段时间了,为了给社区用户提供一个更稳.更快.更易用的备份恢复工具,去年对其进行了比较大的重构.Nebul ... 
- .NET开源功能强大的串口调试工具
			前言 今天大姚给大家分享一款.NET开源的.功能强大的串口调试工具:LLCOM. 工具介绍 LLCOM是一个.NET开源的.功能强大的串口调试工具.支持Lua自动化处理.串口调试.串口监听.串口曲线. ... 
- Inertial Explorer Xpress 学习笔记
			KEY WORDS: Coordinate Updates (CUPTs) Zero Velocity Updates (ZUPTs) Google Protocol Buffer (GPB) 是一 ... 
