首页 > 数据库 >redis的延迟双删策略

redis的延迟双删策略

时间:2022-10-24 16:01:35浏览次数:58  
标签:1.1 双删 数据库 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,这个延时的时间取决于读操作的时间来设定

标签:1.1,双删,数据库,redis,---,修改,数据,延迟
From: https://www.cnblogs.com/ForeverLoveByMe/p/16821726.html

相关文章

  • 使用WireShark分析使用RedisTemplate取不到值的问题
    现象:使用JavaRedis客户端将数据存放到Redis后,使用redisTemplate却不出来原因:JavaRedis客户端在将数据存放在Redis时,会对Key,Value,Field进行编码。从Redis中取数据时,如果......
  • 图解 Redis 分布式锁,写得太好了!
    分布式锁的演进基本原理我们可以同时去一个地方“占坑”,如果占到,就执行逻辑。否则就必须等待,直到释放锁。“占坑”可以去redis,可以去数据库,可以去任何大家都能访问的地......
  • 16.Linux下安装Redis
    1.解压安装解压安装包并将解压后的目录移动到/usr/local/redis目录下,然后安装。tar-zxvfredis-5.0.10.tgzmvredis-5.0.10/usr/local/rediscd/usr/local/redismakecds......
  • Ubuntu安装redis
    一、用Ubuntu的官方软件包安装redis1.更新APT存储库缓存:sudoaptupdate  2.使用APT命令在Ubuntu上安装Redis:sudoaptinstallredis按y,然后按Enter键继续......
  • .net core 5在k8s中部署并发问题之redis
    https://www.cnblogs.com/xwb2535/p/16792124.html 在之前的日记中,记录了csredis+freeredis的不足,今天暂时将redis改用StackExchangeRedis,发现相关redis链接不上......
  • 抛砖系列之redis监控命令
      前言redis是一款非常流行的kv数据库,以高性能著称,其高吞吐、低延迟等特性让广大开发者趋之若鹜,每每看到别人发出的redis故障报告都让我产生一种居安思危,以史为鉴的危......
  • Redis代码实现
    Redis是一个高性能的key-value数据库,有以下三个特点:1.支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。2.不仅仅支持简单的key-value......
  • Redis Web界面管理工具
    一个很友好的RedisWeb界面管理工具。基于.NET实现。可以通过Mono部署到Linux上,下面是我部署在CentOS5.7+Mono2.10.8+Jexus5.0.1:...一个很友......
  • 为docker添加阿里云镜像以及docker中安装mysql与redis
    由于dockerhub访问慢,所以需要借助镜像这里我用阿里云的镜像服务1、sudomkdir-p/etc/docker2、sudotee/etc/docker/daemon.json<<-'EOF'{"registry-mirrors":......
  • redis采用fastjson序列化方式
    packagecom.wangbiao.security.config;importcom.alibaba.fastjson.support.spring.FastJsonRedisSerializer;importorg.springframework.context.annotation.Bean;......