如何解决 Redis 的并发竞争 Key 问题
问题说明
所谓 Redis 的并发竞争 Key 的问题也就是多个系统同时对一个 key 进行操作,但是最后执行的顺序和我们期望的顺序不同,导致了结果的不同
解决方案一:分布式锁+时间戳
(1)如果对这个key操作,不要求顺序
这种情况下,准备一个分布式锁,大家去抢锁,抢到锁就做set操作即可,比较简单。
(2)如果对这个key操作,要求顺序
假设有一个key1,系统A需要将key1设置为valueA,系统B需要将key1设置为valueB,系统C需要将key1设置为valueC.
期望按照key1的value值按照 valueA–>valueB–>valueC的顺序变化。这种时候我们在数据写入数据库的时候,需要保存一个时间戳。假设时间戳如下
系统A key 1 {valueA 3:00}
系统B key 1 {valueB 3:05}
系统C key 1 {valueC 3:10}
那么,假设这会系统B先抢到锁,将key1设置为{valueB 3:05}。接下来系统A抢到锁,发现自己的valueA的时间戳早于缓存中的时间戳,那就不做set操作了。以此类推
解决方案二:消息队列
在并发量过大的情况下,可以通过消息中间件进行处理,把并行读写进行串行化。
把Redis.set操作放在队列中使其串行化,必须的一个一个执行。
这种方式在一些高并发的场景中算是一种通用的解决方案。
参考资料:https://blog.csdn.net/ChenRui_yz/article/details/85096418
https://www.kancloud.cn/hardphp/hardphp-phper/934333
如何解决 Redis 的并发竞争 Key 问题相关推荐
- 如何解决redis的并发竞争key问题?附面试答案
一.背景 我们日常在电商网站购物时经常会遇到一些高并发的场景,例如电商 App 上经常出现的秒杀活动.限量优惠券抢购,还有我们去哪儿网的火车票抢票系统等,这些场景有一个共同特点就是访问量激增,虽然在系 ...
- JAVA面试题系列:如何解决Redis的并发竞争问题
1 面试题 redis的并发竞争问题是什么?如何解决这个问题?了解Redis事务的CAS方案吗? 2 考点分析 这个也是线上非常常见的一个问题,就是多客户端同时并发写一个key,可能本来应该先到的数据 ...
- Redis系列教程(七):Redis并发竞争key的解决方案详解
Redis高并发的问题 Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题: 高并发架构系列:Redis缓存和MySQL数据一致性方案详解 如何解决Redis缓 ...
- Redis并发竞争key的解决方案详解
1.Redis高并发的问题 Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题:缓存击穿.缓存雪崩.缓存和数据一致性,以及今天要谈到的缓存并发竞争. 这里的并发 ...
- Redis面试 - redis 的并发竞争问题是什么?
Redis面试 - redis 的并发竞争问题是什么? 面试题 redis 的并发竞争问题是什么?如何解决这个问题?了解 redis 事务的 CAS 方案吗? 面试官心理分析 这个也是线上非常常见的一 ...
- 解决redis高并发问题的几种思路
解决redis高并发问题的几种思路 1:布隆过滤器 首先,布隆过滤器能解决绝大部分恶意攻击的请求,比如我们数据库中的id通常都设为自增的,是有一定范围大小的,如果有黑客恶意用数据库中没有的id一直访问 ...
- redis缓存穿透、缓存雪崩、缓存击穿、并发竞争
关注微信公众号"虾米聊吧",每天更新一篇技术文章,文章内容涵盖架构师成长必经之路应掌握的技术,一起学习,一起交流. 缓存穿透.缓存雪崩.缓存击穿.并发竞争是缓存最常见的几个问题,接 ...
- 解决Redis缓存雪崩、穿透、并发、预热、击穿、热点Key等问题
一.缓存雪崩 数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机. 比如一个雪崩的简单过程: 1.redis集群大面积故障 2.缓 ...
- 大厂面试官喜欢这样问Redis,双写一致性、并发竞争、线程模型,我整理好了
你知道的越多,你不知道的越多 点赞再看,养成习惯 https://github.com/java-已经开源,有面试脑图 前言 正文 上几期吊打系列我们提到了Redis的很多知识,还没看的小伙伴可以回顾 ...
- Redis:数据并发竞争顺序性
Redis:数据并发竞争顺序性 关键词 第一种方案:分布式锁(串行)+时间戳(保存一个时间戳判断set顺序) 第二种方案:利用消息队列(并行读写进行串行化) 一.数据并发竞争 这里的并发指的是多个re ...
最新文章
- 分表分库之一:分布式数据库的常见用法
- Nginx中worker_connections的问题
- 协程的挂起、恢复和调度的原理 (二)
- IDEA设置取消自动显示参数提示
- 在C ++ STL中使用string :: to_string()将数字转换为字符串
- python map lambda 分割字符串_Python特殊语法:filter、map、reduce、lambda [转]
- c语言异或运算符_计算机中C语言的-运算符
- Python 数据科学手册 5.8 决策树和随机森林
- 如何获取 WebAssembly 代码
- 记录——《C Primer Plus (第五版)》第八章编程练习第八题
- SpringBoot实战(二):SpringMvc接收xml请求
- 优达学城 python 人工智能入门_深度学习TensorFlow入门资源汇总-如何从零开发人工智能...
- 数据结构详解之栈和队列
- paip.自定义java 泛型类与泛型方法的实现总结
- 开源网店系统Javashop 发布3.0beta版
- 怎么修改服务器玩家等级级上限,战神引擎服务端限制玩家最高等级教程
- Windows10 安装程序无法继续,因为你的计算机上安装了更新的Internet Explore版本
- 信息安全体系三种不同的系统架构:MIS+S、S-MIS S2-MIS
- 深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)
- Jetson TX2内存/显存