redis分布式锁学习记录

 

何避免并发出现的超卖情况?

synchronized关键字

在单个jvm运行的情况下可以使用。

Q:多个jvm的情况下怎么办?

使用redis分布式锁

redis setnx 命令

根据setnx命令的特性可以实现加锁的效果

在删除锁之前可能会发生异常因此应该加上try finally,在finally中删除锁

在删除锁之前jvm挂了 这时就需要在setnx的时候设置一个过期时间

lock()方法=setIfAbsent()方法

务必将赋值与设置过期时间写成一条语句保持原子性

由于锁是公共的,可能会出现删除锁会删到别的线程在使用的锁。所以可以加一个标识来鉴别是否是当前线程的锁

业务代码没有执行完锁过期了怎么办?

锁续约,设置好过期时间后开启一个分支线程来监听锁的状态。每隔一段时间查询锁是否存在,存在的话重新设置过期时间。

可使用 Redisson 

https://github.com/redisson/redisson#quick-start

 

redis主从结构还会有问题:当Redisson向主redis发送加锁请求还没来得及同步到从redis时,主redis挂了锁就没有了。

 

提升redis分布式锁的性能可以用库存分段的方式。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了测试 Redis 分布式锁,你可以按照以下步骤进行操作: 1. 确保你已经安装了 Redis,并且可以通过命令行或者其他方式连接到 Redis 服务器。 2. 创建一个测试程序或者脚本,用于模拟多个并发请求获取和释放 Redis 分布式锁的情况。 3. 在测试程序中,使用 Redis 客户端库连接到 Redis 服务器。 4. 在测试程序中,创建多个并发线程或者进程,每个线程或进程都会尝试获取 Redis 。 5. 在每个线程或进程中,使用 Redis 的 SETNX 命令尝试获取。如果 SETNX 返回 1,表示获得了;如果返回 0,表示已经被其他线程或进程持有。 6. 如果获取到,执行需要加的业务逻辑;如果未获取到,等待一段时间后再次尝试获取。 7. 在业务逻辑执行完毕后,使用 Redis 的 DEL 命令释放。 8. 在测试程序中,记录每个线程或进程获取和释放的情况,以及的持有时间和并发冲突情况。 9. 执行测试程序,观察输出结果,检查是否存在并发冲突和的正确获取和释放。 10. 根据测试结果进行分析和调优,修改测试程序或者业务逻辑,以确保 Redis 分布式锁的正确性和高可用性。 请注意,在测试分布式锁时,你可能需要考虑以下情况: - 并发请求的数量和频率 - 的超时时间和自动释放机制 - 的重入性和可重入性 - 异常情况下的的释放和恢复机制 - 的可靠性和高可用性 以上是一般的测试步骤,你可以根据具体的使用场景和需求进行适当调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值