Redis-分布式锁

并发场景下,多个线程读写同一资源,可能会产生数据安全性问题。单机条件下,我们可以通过加synchronized锁,其他lock锁,设置原子变量等来解决这个问题。但多数情况下,我们的服务以集群的方式部署,多个进程同时对同一资源读写,比如,多个应用实例同时更新订单表中同一笔订单的订单状态,或者多个实例同时修改同一个商品的库存等,这时候在单机上使用synchronized锁只能控制一个实例对资源操作,而控制不了其他实例对资源,所以需要使用分布式锁。

一、Redis作为分布式锁

我们可以使用Redis,对资源加互斥锁,A 线程操作时,B线程不允许操作以保证数据的安全性。比如给使用Redis的setnx方法,只允许一个线程对变量加锁。一般理想很丰满,实际操作时遇到的问题也很丰满,在下面导图中列出了一些可能遇到的问题和对应的解决方案。

二、Redisson 

是一个高级的分布式协调Redis客户端,能帮助用户在分布式环境中轻松实现一些Java的对象,Redisson、Jedis、Lettuce 是三个不同的操作 Redis 的客户端,Jedis、Lettuce 的 API 更侧重对 Reids 数据库的 CRUD(增删改查),而 Redisson API 侧重于分布式开发。

下图是Redisson实现锁续命的流程图:

参考:

Redisson

聊聊redis分布式锁的8大坑

图灵学院Redis分布式锁课程

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王师傅66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值