基于redis锁的实现
来源:互联网 发布:mac文档怎么转换格式 编辑:程序博客网 时间:2024/06/09 18:43
实现redis锁基于以下两个条件:
第一:
从2.6.12版本开始,redis为SET
命令增加了一系列选项:
EX
seconds – Set the specified expire time, in seconds.PX
milliseconds – Set the specified expire time, in milliseconds.NX
– Only set the key if it does not already exist.XX
– Only set the key if it already exist.EX
seconds – 设置键key的过期时间,单位时秒PX
milliseconds – 设置键key的过期时间,单位时毫秒NX
– 只有键key不存在的时候才会设置key的值XX
– 只有键key存在的时候才会设置key的值
第二:
基于redis的命令eval 运行 lua 命令保证原子性
首先我们看实例:
$redis = new Redis();$redis->connect('127.0.0.1', 6379);$lockKey = 'lock';$token = uniqid("lock".rand(),true);$ttl = '5000';//NX代表KEY不存在时设置,相当于setNX//PX设置过期时间,单位是毫秒$res = $redis->set($lockKey, $token, ['NX', 'PX' => $ttl]);if($res){//获得了锁}//解锁$script = <<<LUASCRIPT if redis.call("GET", KEYS[1]) == ARGV[1] then return redis.call("DEL", KEYS[1]) else return 0 endLUASCRIPT;$redis->eval($script, [$lockKey, $token], 1);
首先生成一个Token值,给redis加锁,返回true则就锁成功,否则则是其他进程获取了锁。
解锁的依赖redis lua 脚本的原子性,锁存在并且key值为token的时候才解锁。避免误解其他进程的锁。
阅读全文
0 0
- 基于redis锁的实现
- 基于redis的分布式锁的实现
- 基于redis的分布式锁的实现
- 基于Redis的分布式锁实现
- 基于Redis的分布式锁实现方式
- 基于redis的悲观锁实现
- Java实现基于Redis的分布式锁
- Java实现基于Redis的分布式锁
- Java实现基于Redis的分布式锁
- Java实现基于Redis的分布式锁
- 基于redis实现可靠的分布式锁
- 基于Redis实现简单的分布式锁
- 基于redis的分布式锁服务实现
- 基于redis 实现分布式锁的方案
- 基于Redis实现简单的分布式锁
- 基于Redis实现的分布式锁
- Java实现基于Redis的分布式锁
- 基于redis实现的分布式锁
- java使用fileupload接收上传文件
- 【网络】绘制基本网络图
- Eclipse与GitHub的整合(二)——Eclipse clone远程项目到本地
- Netty搭建服务器
- phpqrcode生成二维码
- 基于redis锁的实现
- HDU 1874 畅通工程续
- Big-O Algorithm Complexity Cheat Sheet [译]
- 几种任务调度的 Java 实现方法与比较
- 模拟post登陆
- jsp笔记
- Servlet
- 欢迎使用CSDN-markdown编辑器
- Python学习(十九)——CSV文件读写