Redis:数据并发竞争顺序性


关键词

  • 第一种方案:分布式锁(串行)+时间戳(保存一个时间戳判断set顺序)
  • 第二种方案:利用消息队列(并行读写进行串行化)

一、数据并发竞争

这里的并发指的是多个redis的client同时set 同一个key引起的并发问题。

多客户端(Jedis)同时并发写一个key,一个key的值是1,本来按顺序修改为2,3,4,最后是4,但是顺序变成了4,3,2,最后变成了2。

二、第一种方案:分布式锁+时间戳

主要是准备一个分布式锁,大家去抢锁,抢到锁就做set操作。

加锁的目的实际上就是 把并行读写改成串行读写的方式 ,从而来避免资源竞争。

  • 主要用到的redis函数是setnx()
    用SETNX实现分布式锁
  • 时间戳
    由于上面举的例子,要求key的操作需要顺序执行,所以需要保存一个时间戳判断set顺序。
系统A  key 1  { ValueA 7:00}
系统B  key 1  { ValueB 7:05}

假设系统B先抢到锁,将key1设置为{ValueB 7:05}
接下来系统A抢到锁,发现自己的key1的时间戳早于缓存中的时间戳(7:00<7:05),那就不做set操作了。

三、第二种方案:利用消息队列

在并发量过大的情况下,可以通过消息中间件进行处理,把并行读写进行串行化。

把Redis的set操作放在队列中使其串行化,必须的一个一个执行。

Redis:数据并发竞争顺序性相关推荐

  1. JAVA面试题系列:如何解决Redis的并发竞争问题

    1 面试题 redis的并发竞争问题是什么?如何解决这个问题?了解Redis事务的CAS方案吗? 2 考点分析 这个也是线上非常常见的一个问题,就是多客户端同时并发写一个key,可能本来应该先到的数据 ...

  2. Redis面试 - redis 的并发竞争问题是什么?

    Redis面试 - redis 的并发竞争问题是什么? 面试题 redis 的并发竞争问题是什么?如何解决这个问题?了解 redis 事务的 CAS 方案吗? 面试官心理分析 这个也是线上非常常见的一 ...

  3. 如何解决redis的并发竞争key问题?附面试答案

    一.背景 我们日常在电商网站购物时经常会遇到一些高并发的场景,例如电商 App 上经常出现的秒杀活动.限量优惠券抢购,还有我们去哪儿网的火车票抢票系统等,这些场景有一个共同特点就是访问量激增,虽然在系 ...

  4. redis缓存穿透、缓存雪崩、缓存击穿、并发竞争

    关注微信公众号"虾米聊吧",每天更新一篇技术文章,文章内容涵盖架构师成长必经之路应掌握的技术,一起学习,一起交流. 缓存穿透.缓存雪崩.缓存击穿.并发竞争是缓存最常见的几个问题,接 ...

  5. Redis系列教程(七):Redis并发竞争key的解决方案详解

    Redis高并发的问题 Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题: 高并发架构系列:Redis缓存和MySQL数据一致性方案详解 如何解决Redis缓 ...

  6. Redis并发竞争key的解决方案详解

    1.Redis高并发的问题 Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题:缓存击穿.缓存雪崩.缓存和数据一致性,以及今天要谈到的缓存并发竞争. 这里的并发 ...

  7. Mysql和Redis数据同步该怎么做

    前言 算法血拼:Google+百度+Alibaba+字节+Tencent+网易+360+拼夕夕+美团 不知不觉双11就来了,轰轰烈烈的秋招也完美结束了,不知算法与数据结构成为了多少小伙伴进击大厂的绊脚 ...

  8. 详解,最新整理,RabbitMQ,RocketMQ,Kafka 事务性,消息丢失,消息顺序性和消息重复发送的处理策略

    消息队列常见问题处理 分布式事务 什么是分布式事务 我们的服务器从单机发展到拥有多台机器的分布式系统,各个系统之前需要借助于网络进行通信,原有单机中相对可靠的方法调用以及进程间通信方式已经没有办法使用 ...

  9. RabbitMQ,RocketMQ,Kafka 事务性,消息丢失,消息顺序性和消息重复发送的处理策略

    消息队列常见问题处理 分布式事务 什么是分布式事务 我们的服务器从单机发展到拥有多台机器的分布式系统,各个系统之前需要借助于网络进行通信,原有单机中相对可靠的方法调用以及进程间通信方式已经没有办法使用 ...

最新文章

  1. java clob 释放_在Java中处理CLOB字段
  2. 博客园2013年4月份第2周源码发布详情
  3. C++:运算符重载函数之成员运算符重载函数
  4. hls fifo_【FCCM2020】HLS 高手对比 Verilog 高手,到底输哪了?
  5. 【知识星球】为什么图像分类任务要从256*256中裁剪出224*224
  6. Vue.创建工程卡住
  7. 用MyEclipse将java文件转换成UML类图
  8. python计算银行余额_Python:将银行扣费信息整理成账单
  9. adobe reader XI打开大约十几秒就闪退问题解决方法大全
  10. 文库下载软件 冰点文库下载器 软件 百度网盘链接地址
  11. 可魔术变身笔记本的平板电脑,华为全功能MediaPad 10 FHD评测
  12. cmd find 命令 多个 或者 关系 +windows_使用 rush 进行命令并行处理
  13. html 表格选择滚动条,table设置tbody滚动条
  14. python数据驱动参数化登录_HttpRunner 参数化数据驱动
  15. 前端推荐的书籍学习(必看)
  16. tiktok旋转验证码识别
  17. 基类、派生类、虚基类、虚函数、虚析构、纯虚函数、抽象类
  18. idea怎么看jdk版本_怎么看自己的jdk版本
  19. 阿里心电图数据特征分析
  20. 用MATLAB AppDesigner开发了一款的高级日期时间计算器(Advanced Date Time Calculator)

热门文章

  1. MySQL日志审计 帮你揪出内个干坏事儿的小子
  2. 在 CentOS 5.4 下编译安装MySQL时
  3. OGEngine引擎开发slot 手游强势来袭
  4. iOS平台经典游戏《合金弹头X》上架 售价25元
  5. VMware ESXi 为虚拟机分配usb设备(硬盘)
  6. Practice Lab 7:路由再分发
  7. Oracle 技术集锦
  8. C#将LINQ数据集转换为Datatable
  9. Swift语法专题五——集合类型
  10. oracle创建表空间、用户