前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis分布式锁的实现方式

Redis分布式锁的实现方式

原创
作者头像
用户6510625
修改2019-10-21 14:34:03
4630
修改2019-10-21 14:34:03
举报
文章被收录于专栏:成长之路

1.实现分布式锁一般具有三种形式:

1.1 数据库的乐观锁

1.2 redis的分布式锁

1.3 zookeeper的分布式锁

2.对于redis分布式锁需要满足的条件共有4点;

2.1 互斥性,任意时刻只有一个人拥有锁

2.2 不会发生死锁,那就是当一个人持有锁之后,因为系统崩溃,而未释放锁,那么就需要释放锁

2.3 具有容错性,当一个redis节点挂掉之后,程序正常工作;

2.4 加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给释放了;

3.代码实现;

3.1 使用Maven引入jedis的依赖,选择2.9的版本,这样的API比较全;

3.2 使用Jedis的set方法

jedis.set(Lockkey, requestId,"NX","PX" , timeout)

lockkey表示为锁,也就是redis中的唯一key,

requestId表示为:标识该锁是哪个客户端加锁的;

NX:set if not exist

PX:表示是有过期时间的

timeout :表示过期时间;

3.3 注意点:

加锁和设置过期时间,必须是一步完成的,也就是原子性;如果不是原子性,先加锁,然后系统崩溃,那么该锁没有过期时间,就成了死锁;

requestId是为了该锁只能由该客户端进行解锁;

解锁过程:

参考 微信公众号 石杉的架构笔记 中的 Redis分布式锁的正确实现方式

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.实现分布式锁一般具有三种形式:
    • 1.1 数据库的乐观锁
      • 1.2 redis的分布式锁
        • 1.3 zookeeper的分布式锁
        • 2.对于redis分布式锁需要满足的条件共有4点;
        • 3.代码实现;
          • 3.1 使用Maven引入jedis的依赖,选择2.9的版本,这样的API比较全;
            • 3.2 使用Jedis的set方法
              • 3.3 注意点:
              相关产品与服务
              云数据库 Redis
              腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档