Redis(二)分布式锁+异步队列+持久化

通过Redis实现分布式锁

  1. 分布式锁应该具备哪些条件
  • 在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行
  • 高可用的获取锁与释放锁
  • 高性能的获取锁与释放锁
  • 具备可重入特性(可理解为重新进入,由多于一个任务并发使用,而不必担心数据错误)
  • 具备锁失效机制,防止死锁
  • 具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败
  1. 分布式锁应该解决的问题
  • 互斥性问题:不能同时有两个客户端获取到锁
  • 安全性问题:锁只能由持有它的客户端删除,不能由其他客户端删除
  • 死锁问题:一旦获取到锁的某个客户端宕机,释放不了锁,会造成死锁,应该存在一定的锁机制来避免死锁
  • 容错问题:在一些结点宕机后,客户端任然能够获取和释放锁
  1. 通过redis实现分布式锁
  • SETNX key value:如果key不存在,则创建并且赋值(时间复杂度为O(1),若设置成功返回1,否则返回0)
  • EXPIRE key seconds:设置key的生存时间,当key过期时(生存时间为0),会自动被删除
    但是这里会存在问题,如果刚执行完SETNX然后缓存就挂了,那么锁就无法被释放了,主要原因是虽然这两个操作都是原子性的,但是他们加起来就不
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值