专栏首页成长之路Redis分布式锁的实现方式
原创

Redis分布式锁的实现方式

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分布式锁的正确实现方式

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • stream流

    用户6510625
  • 基于DOCKER安装Redis Sentinel 集群以及springboot连接Redis哨兵集群demo

    yingzi_code
  • 如何创建私有Python包存储库

    Python包的基本脚手架是一个包含与用户交互的代码的__init__.py文件。

    林纾燊
  • [Redis]python连接redis

    只是看看能不能成功使用python操作redis,redis具体的数据结构和使用会在以后学习。

    py3study
  • phpredis 扩展使用带密码的 redis

    zcqshine
  • Redis Sentinel安装与部署,实现redis的高可用

      对于生产环境,高可用是避免不了要面对的问题,无论什么环境、服务,只要用于生产,就需要满足高可用;此文针对的是redis的高可用。

  • Redis+Keepalived高可用环境部署记录

    洗尽了浮华
  • Git commit message和工作流规范

    接入参考commit-message-test-project项目。具体步骤如下:

    兜兜毛毛
  • Memcached 与 Redis 实现的对比

    memcached 和 redis,作为近些年最常用的缓存服务器,相信大家对它们再熟悉不过了。前两年还在学校时,我曾经读过它们的主要源码,如今写篇笔记从个人角度...

    _Super_
  • 敢在线上Redis做Keys正则匹配操作!

    运行后导致redis hang住,接着CPU飙升,业务上所有支付链路卡住,所有的请求流量全部挤压到了rds数据库中,引起数据库雪崩效应,进而直接宕机。

    物流IT圈

扫码关注云+社区

领取腾讯云代金券