REDIS中加锁和解锁问题
使用lua+redis的方法。之所以使用lua是为了保证原子性
问题:
1、 redis发现锁失败了要怎么办?中断请求还是循环请求?
2、 循环请求的话,如果有一个获取了锁,其它的在去获取锁的时候,是不是容易发生抢锁的可能?
3、 锁提前过期后,客户端A还没执行完,然后客户端B获取到了锁,这时候客户端A执行完了,会不会在删锁的时候把B的锁给删掉?
针对问题1:使用循环请求,循环请求去获取锁
针对问题2:针对第二个问题,在循环请求获取锁的时候,加入睡眠功能,等待几毫秒在执行循环
针对问题3:在加锁的时候存入的key是随机的。这样的话,每次在删除key的时候判断下存入的key里的value和自己存的是否一样
do { //针对问题1,使用循环$timeout = 10;$roomid = 10001;$key = 'room_lock';$value = 'room_'.$roomid; //分配一个随机的值针对问题3$isLock = Redis::set($key, $value, 'ex', $timeout, 'nx');//ex 秒if ($isLock) {if (Redis::get($key) == $value) { //防止提前过期,误删其它请求创建的锁//执行内部代码Redis::del($key);continue;//执行成功删除key并跳出循环}} else {usleep(5000); //睡眠,降低抢锁频率,缓解redis压力,针对问题2}} while(!$isLock);
转载于:https://www.cnblogs.com/linn/p/11045565.html
REDIS中加锁和解锁问题相关推荐
- UNIX操作系统中加锁和解锁
Unix操作系统加锁和解锁的基本思想是,当某个进程进入临界区,它将持有一个某种类型的锁(UNIX里一般来说是semaphore,Linux里一般是信号量和原子量或者spinlock).当其他进程在该进 ...
- Redis实现分布式锁:加锁、解锁、续租和一致
目录 分布式锁及其应用场景 为何需要分布式锁 分布式锁的特性 互斥性 不死锁 一致性 可重入性 支持阻塞和非阻塞: 支持公平锁和非公平锁(可选) 使用原生Redis实现分布式锁 加锁 解锁 续租 如何 ...
- 使用redis的setnx可以非同一线程进行加锁和解锁(附源码)
使用redis的setnx可以非同一线程进行加锁和解锁(附源码) 问题背景 项目搭建 总结 Lyric: 那在终点之前 问题背景 Redisson做分布式锁是目前比较流行的方式,但是在使用的过程中遇到 ...
- redis加锁、解锁
在Java中,关于锁我想大家都很熟悉.在并发编程中,我们通过锁,来避免由于竞争而造成的数据不一致问题.通常,我们以synchronized .Lock来使用它. 但是Java中的锁,只能保证在同一个J ...
- jedis对redis键加锁+解锁+事务提交
[README] redis的java客户端对键加锁和解锁(Jedis.watch() Jedis.unwatch() ): [1]代码 /*** redis加锁-watch * [场景描述]: ...
- 【面试题】Redis中是如何实现分布式锁的
分布式锁常见的三种实现方式: 数据库乐观锁: 基于Redis的分布式锁: 基于ZooKeeper的分布式锁. Redis的分布式锁 Redis要实现分布式锁,以下条件应该得到满足 互斥性:在任意时刻, ...
- redis实现轮询算法_【07期】Redis中是如何实现分布式锁的?
点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 分布式锁常见的三种实现方式: 数据库乐观锁: 基于Redis的分布式锁: 基于ZooKeeper的分布式锁. 本地面 ...
- Redis初学:14(Redis中的事务)
Redis中的事务 Redis的事务定义 Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断. Redis事务的主 ...
- java队列加锁_java并发-----浅析ReentrantLock加锁,解锁过程,公平锁非公平锁,AQS入门,CLH同步队列...
前言 为什么需要去了解AQS,AQS,AbstractQueuedSynchronizer,即队列同步器.它是构建锁或者其他同步组件的基础框架(如ReentrantLock.ReentrantRead ...
- ReentrantLock 公平锁和非公平锁加锁和解锁源码分析(简述)
- title: ReentrantLock 公平锁和非公平锁加锁和解锁源码分析(简述) - date: 2021/8/16 文章目录 一.ReentrantLock 1. 构造函数 二.Reentr ...
最新文章
- 创建物化视图commit_oracle 中物化视图讲解
- 大家都来说说为什么要学习jQuery Mboile?
- Android自定义绘制 绘制基础
- 潭州Java中级班(day_04)
- springmvc参数绑定
- 获取控制器 nextResponder的简单应用
- 程序员:你的业余时间是怎么被浪费掉的?
- Vim winmanager文件浏览自动更新
- redis常用命令(基础篇)
- VS+Qt报错无法解析的外部符号
- java数字的实验怎么做_java实验题目
- 基于正点原子STM32F407开发板源码和贪吃蛇程序
- windows 豆沙绿参数
- localStorage的使用方法
- ssb门限_ssb单边带的产生方法
- 三炮的三舅走了,才发觉日子真的不经念叨呀!
- 区块链钱包—BTC Java版离线签名交易
- 最新版Jenkins 2.249.3的安装
- 【146】LRU缓存机制
- 【JNLP】什么是JNLP