首页 > 数据库 >Redis的并发竞争问题和解决方案

Redis的并发竞争问题和解决方案

时间:2023-02-24 17:57:06浏览次数:36  
标签:竞争 Redis 系统 更新 并发 key 解决方案 数据

什么是并发竞争
比如我们现在同一个缓存key,test_key = v1。现在有A、B、C三个系统几乎同时来更新,那么原本顺序应该是A系统更新为v2、B系统更新为v3、C系统更新为v4。但是因为A系统没有竞争过来,变成了B、C先更新,也就是v1->v3->v4->v2,最后的值应该是v4现在确是v2。这就是并发竞争产生的问题。

如何解决
我们每次更新的时候,要判断一下这个数据的时间戳,如果缓存中的数据时间戳比自己更晚,那么自己的数据就是历史数据,不需要再更新。
另外,还要通过zk加一个分布式锁,每次更新的时候都去获取这个锁,保证同一时间只有一个进程在更新一个key
————————————————
版权声明:本文为CSDN博主「木小同」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41011482/article/details/118311483

 

文章参考 2:

背景:比如我们有三个系统服务,然后由于某个数据从来没请求过,现在三个系统并发对该数据进行请求和修改的时候就会出现并发竞争问题了,当然由于redis的单线程结构其实这里不存在锁和阻塞问题,这里的问题是可能出现老数据覆盖新数据的问题。

解决方案:

利用分布式锁(zk或者redis)做门,只有一个服务可以进行开门尝试,并且需要用自己的钥匙去匹配,匹配成功再去做下面操作

只有成功获取锁的系统可以进行修改并且要带上数据的版本号,我们要做cas和自旋(自行参考aotomicinteger修改数据方法的源码(compareAndSwap))只有到了这个版本号才进行修改

 

标签:竞争,Redis,系统,更新,并发,key,解决方案,数据
From: https://www.cnblogs.com/sword0077/p/17152624.html

相关文章

  • Redis 6种淘汰策略说明
    一、键的过期时间Redis可以为每一个键设置过期时间,当键过期之后,会自动删除该键。对于散列表这种容器,只能为整个键设置过期时间(整个散列表),而不能为键里面的单个元素设置过期......
  • JAVA文件夹上传解决方案
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1. 通过form表单向后端发送请求    ......
  • redis_概述与redis_下载&安装
    redis_概述: redis是一款高性能的NOSQL系列的非关系型数据库 什么是NOSQLNoSQL(NoSQL=NotOnlySQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系......
  • redis list操作 set&sortedset操作
               ......
  • java并发知识点
    Java并发什么是线程,Java中实现线程的常用方式有几种,如何创建线程,终止线程有哪些方式线程是操作系统调度的最小单元;java创建线程:执行newThread().start()方法调用操......
  • 880~811 redis持久化RDB,AOF
    4.持久化1、redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。2、redis持久化机制:......
  • Linux 安装Redis-6.2.5
    https://blog.csdn.net/weixin_40750377/article/details/122110481https://blog.csdn.net/weixin_44353336/article/details/114601513#1.3、编译并安装Redis......
  • Redis SET命令用于在Redis键中设置一些字符串值。
    RedisSET命令用于在Redis键中设置一些字符串值。返回值如果在键中设置了值,返回简单字符串回复:OK。如果值没有设置则返回Null。语法下面是RedisSET命令的基本语法......
  • Go语言并发编程:对进程、线程、协程和并发、并行的理解
    Go语言并发编程:进程、线程、协程和并发、并行的理解一、进程和线程对操作系统进程和线程以及协程的了解,可以看看我前面的文章:对进程、线程和协程的理解以及它们的区别......
  • JSP文件夹上传解决方案
    ​ 第一点:Java代码实现文件上传FormFilefile=manform.getFile();StringnewfileName= null;Stringnewpathname= null;StringfileAddre= "/numUp";try{......