Redis 实现锁

栏目: 数据库 · 发布时间: 7年前

内容简介:需求就不细说了,想必都遇到过要用数据锁的场景。看了一些资料以及其他的代码,修改记录下。基本原理就是使用 Redis 的 SETNX 命令来实现。设置失败时,说明这个锁正在使用中。在一定时间内,循环请求,直到当前锁释放,然后获得锁

导语

需求就不细说了,想必都遇到过要用数据锁的场景。看了一些资料以及其他的代码,修改记录下。

SETNX

基本原理就是使用 Redis 的 SETNX 命令来实现。

key 的值设为 value ,当且仅当 key

不存在。

若给定的 key 已经存在,则 SETNX 不做任何动作。

SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。

返回值:

设置成功,返回 1

设置失败,返回 0

设置失败时,说明这个锁正在使用中。在一定时间内,循环请求,直到当前锁释放,然后获得锁

实例

<?php
include 'redis.php';// 前文中连接 Redis 的方法

$redis = getRedis();

function redisLock()
{
    $redis = getRedis();
    $redisKey = 'redisKey';
    $redisValue = time();

    for ($i = 0; $i < 150; $i++) {

        $flag = $redis->setnx($redisKey, $redisValue);
        if (!$flag) {
            // 获取锁失败
            usleep(200000);
            continue;
        }

        // 此处进行操作,操作完成后释放锁
        $redis->del($redisKey);
        return true;
    }

    // 防止死锁,超过 5 分钟删除
    if (time() - $redis->get($redisKey) > (60 * 5)) {
        $redis->del($redisKey);
    }
    return false;
}

参考资料: SETNX


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法Ⅰ~Ⅳ(C++实现):基础、数据结构、排序和搜索

算法Ⅰ~Ⅳ(C++实现):基础、数据结构、排序和搜索

Sedgewick / 高等教育出版社 / 2002-1 / 49.00元

本书通过C++实现方案以简洁、直接的方式对书中的算法和数据结构进行表述,并向学生提供在实际应用中验证这种方法的手段。   本书广泛地论述了与排序、搜索及相关应用有关的基本数据结构和算法。覆盖了数组、链表、串、树和其他基本数据结构,更多地强调抽象数据类型(ADT)、模块化程序设计、面向对象程序设计和C++类。本书包括排序、选择、优先队列ADT实现和符号表ADT(搜索)实现,配有帮助学生学习计算......一起来看看 《算法Ⅰ~Ⅳ(C++实现):基础、数据结构、排序和搜索》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

html转js在线工具
html转js在线工具

html转js在线工具