资讯专栏INFORMATION COLUMN

Redis 实现锁

RiverLi / 2879人阅读

摘要:基本原理就是使用的命令来实现。将的值设为,当且仅当不存在。设置失败时,说明这个锁正在使用中。在一定时间内,循环请求,直到当前锁释放,然后获得锁实例前文中连接的方法获取锁失败此处进行操作,操作完成后释放锁防止死锁,超过分钟删除参考资料。

导语

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

SETNX

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

key 的值设为 value ,当且仅当 key 不存在。

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

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

返回值:

设置成功,返回 1

设置失败,返回 0

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

实例
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。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30076.html

相关文章

  • 百度社招面试题——如何用Redis实现分布式

    摘要:集群实现分布式锁上面的讨论中我们有一个非常重要的假设是单点的。但是其实这已经超出了实现分布式锁的范围,单纯用没有命令来实现生成。这个问题用实现分布式锁暂时无解。结论并不能实现严格意义上的分布式锁。 关于Redis实现分布式锁的问题,网络上很多,但是很多人的讨论基本就是把原来博主的贴过来,甚至很多面试官也是一知半解经不起推敲就来面候选人,最近结合我自己的学习和资料查阅,整理一下用Redi...

    YanceyOfficial 评论0 收藏0
  • Redis分布式

    摘要:之分布式锁的实现方案如何优雅地实现分布式锁博客地址分布式锁关键词分布式锁是控制分布式系统之间同步访问共享资源的一种方式。 Redis之分布式锁的实现方案 - 如何优雅地实现分布式锁(JAVA) 博客地址 https://blog.piaoruiqing.cn/2019/05/19/redis分布式锁/ 关键词 分布式锁: 是控制分布式系统之间同步访问共享资源的一种方式。 spring-d...

    LeoHsiun 评论0 收藏0
  • PHP 使用 Redis 实现分布式

    摘要:由于执行的原子性所以不要在中执行过长开销的程序,否则会验证影响其它请求的执行。同一个脚本生成的签名都是相同的,所以签名可以先在本地生成,然后在服务器上一次脚本,程序中只需保存和使用该签名即可。同样的脚本,是始终生成相同的签名的。 Last-Modified: 2019年6月5日15:59:34 参考链接 PHP使用Redis+Lua脚本操作的注意事项 《Redis官方文档》用Redi...

    Coly 评论0 收藏0

发表评论

0条评论

RiverLi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<