美文网首页技艺实践敏捷转型Redis
基于Redis的SET和TTL机制实现分布式锁

基于Redis的SET和TTL机制实现分布式锁

作者: 而立不惑之年 | 来源:发表于2018-07-04 20:26 被阅读49次

基于SETNX的锁,类似《Redis setNX 实现分布式锁(重复数据插入可用其来实现排他锁)》,在SETNX的Value里面设置超时时间,超时时存在多个进程同时解锁情况。使用Redis的SETNX和TTL就可以解决这个问题。

算法如下:

1. 使用SETNX加锁

1.1)获取锁,使用expire设置TTL时间。加锁成功,处理业务。跳转2.

1.2)加锁失败,利用TTL获取TTL时间。如果没有时间,设置一个时间。加锁失败,根据TTL时间休眠,返回1

2. 业务处理完成,解锁。

3. 超时后,会自动解锁。

说明:设置的超时时间必须大于处理时间,否则可能存在多个进程进入临界区。

使用SET key value [EX seconds] [PX milliseconds] [NX|XX]可以简化。

算法如下:

1. 使用 SET key value EX seconds NX  加锁

1.1)返回OK。加锁成功,处理业务。跳转2.

1.2)返回null。加锁失败,根据TTL时间休眠,返回1

2. 业务处理完成,解锁。

3. 超时后,会自动解锁。

说明:设置的超时时间必须大于处理时间,否则可能存在多个进程进入临界区。

相关文章

  • 基于Redis的SET和TTL机制实现分布式锁

    基于SETNX的锁,类似《Redis setNX 实现分布式锁(重复数据插入可用其来实现排他锁)》,在SETNX的...

  • 基于redis实现的分布式锁

    本文要点 基于redis实现分布式锁demo 基于redis实现分布式锁原理 基于redis实现分布式锁优缺点 正...

  • 并发编程之redis分布式锁

    基于redis实现的锁机制,主要是依赖redis自身的原子操作(因为redis是单线程)。 原子操作命令:SET ...

  • 分布式锁实现

    基于数据库实现分布式锁基于缓存(redis,memcached)实现分布式锁基于Zookeeper实现分布式锁 s...

  • 基于redis的分布式锁

    分布式锁实现方案 基于数据库实现分布式锁 基于缓存(redis,memcached,tair)实现分布式锁 基于Z...

  • 7.2-基于Redis实现分布式锁的几种坑你是否踩过《上》—小滴

    基于Redis实现分布式锁的几种坑你是否踩过《上》 简介:基于Redis实现分布式锁的几种坑 实现分布式锁 可以用...

  • 分布式锁

    redis 实现分布式锁 redis 是单实例 实现分布式锁需要的很早期命令SETNX,这个命令表示 SET If...

  • 分布式锁的实现方式

    分布式锁通常有3种实现方式,即数据库乐观锁、基于redis的分布式锁和基于zookeeper的分布式锁。 一、基于...

  • 分布式锁

    几种实现方式 基于数据库实现分布式锁 基于缓存(Redis,memcached,tair)实现分布式锁 基于Zoo...

  • 84 redis实现分布式锁的原理

    1,Redis使用setnx 实现2,Redisson 分布式锁;Redis基于 setnx 实现分布式锁原理:R...

网友评论

    本文标题:基于Redis的SET和TTL机制实现分布式锁

    本文链接:https://www.haomeiwen.com/subject/pfuyuftx.html