Redis的并发竞争问题的解决方案总结详解大数据
Redis的并发竞争问题,主要是发生在并发写竞争。
考虑到redis没有像db中的sql语句,update val = val + 10 where ,无法使用这种方式进行对数据的更新。
假如有某个key = price , value值为10,现在想把value值进行+10操作。正常逻辑下,就是先把数据key为price的值读回来,加上10,再把值给设置回去。如果只有一个连接的情况下,这种方式没有问题,可以工作得很好,但如果有两个连接时,两个连接同时想对还price进行+10操作,就可能会出现问题了。
例如:两个连接同时对price进行写操作,同时加10,最终结果我们知道,应该为30才是正确。
考虑到一种情况:
T1时刻,连接1将price读出,目标设置的数据为10+10 = 20。
T2时刻,连接2也将数据读出,也是为10,目标设置为20。
T3时刻,连接1将price设置为20。
T4时刻,连接2也将price设置为20,则最终结果是一个错误值20。
利用redis自带的incr命令,具体用法看这里http://doc.redisfans.com/string/incr.html。
可以使用独占锁的方式,类似操作系统的mutex机制。(网上有例子,http://blog.csdn.net/black_ox/article/details/48972085 不过实现相对复杂,成本较高)
使用乐观锁的方式进行解决(成本较低,非阻塞,性能较高)
如何用乐观锁方式进行解决?
本质上是假设不会进行冲突,使用redis的命令watch进行构造条件。伪代码如下:
watch price get price $price $price = $price + 10 multi set price $price exec
解释一下:
watch这里表示监控该key值,后面的事务是有条件的执行,如果从watch的exec语句执行时,watch的key对应的value值被修改了,则事务不会执行。
具体看Redis的事务功能详解这篇文章里的watch命令介绍。
这个是针对客户端来的,在代码里要对redis操作的时候,针对同一key的资源,就先进行加锁(java里的synchronized或lock)。
利用redis的setnx实现内置的锁。
9755.html
分布式文件系统,分布式数据库区块链并行处理(MPP)数据库,数据挖掘开源大数据平台数据中台数据分析数据开发数据治理数据湖数据采集相关文章
- Redis性能测试:深入解析(redis性能测试解析)
- 热备双机热备:保障Redis性能安全(redis双机)
- 解锁Redis:高性能并发处理(redis高并发处理)
- 快速获取数据:Redis的探索之旅(redis取数据)
- 如何判断Redis是否安装成功(怎么看是否安装redis)
- 检查Redis中是否有数据循环遍历法(循环redis是否有数据)
- 极速打造Redis客户端,轻松获取大数据精准信息(获取redis客户端)
- 浏览器访问Redis现在更加方便(网页访问redis)
- 破解Redis数据的最新查询命令(查询redis数据命令)
- 监控Redis中键值变化,保护所存储数据(监听redis中的key)
- 使用Redis技术实现高效数据存储(用到redis的写法)
- 李强强助力企业提升通过Redis实现数据治理(李强强 redis)
- 基于Redis的数据监测平台全面上线(数据监测平台 redis)
- 实现可靠的数据清洗存储策略与Redis的结合(数据清洗策略存redis)
- 数据爆炸如何优化Redis排行榜(排行榜redis数据太多)
- 静态类Redis提高数据性能的不二选择(为什么要静态类redis)
- 通过SSH如何配置Redis服务器(ssh怎么配置redis)
- Redis助力解决高并发问题(利用redis解决高并发)
- 架构稳定,使用Redis读写分离实现高并发性能(使用redis读写分离)
- 如何让Redis在外网访问(外网地址设置redis)
- Redis在高并发环境中实现一致性保障(redis高并发下一致性)
- 使用Redis队列还原数据值(redis 队列还原值)
- Redis锁存在的不足之处(redis锁缺点)
- 使用Redis存储散列数据(redis里的散列)
- Redis超时间中不停止追求(redis超时不等待)
- Redis实现数据持久化的方法(redis调用持久化)
- 调整Redis,提升访问速度(redis访问时间过长)
- 时间极大提高效率Redis 设置统一过期时间(redis 设置统一过期)
- Redis 加速数据访问 配置合理的空闲时间(redis 设置空闲时间)
- Redis服务器时间设置指南(redis设置服务器时间)
- 获取所有利用Redis实现数据持久化(redis获取所以可以)
- 管理器精确控制Redis网络流量消耗(redis 网络上的消耗)