教你正确地使用Redis的SETNX实现锁机制


当前第2页 返回上一页

1

2

3

4

5

6

7

$rs = $redis->set($key, $value, array('nx', 'ex' => $ttl));

if ($rs) {

    //处理更新缓存逻辑

    // ......

    //删除锁

    $redis->del($key);

}

到这一步其实还是有问题的,如果一个请求更新缓存的时间比锁的有效期还要长,导致在缓存更新过程中锁就失效了,此时另一个请求就会获取到锁,但前一个请求在缓存更新完毕的时候,直接删除锁的话就会出现误删其它请求创建的锁的情况。所以要避免这种问题,可以在创建锁的时候需要引入一个随机值并在删除锁的时候加以判断

1

2

3

4

5

6

7

8

9

$rs = $redis->set($key, $random, array('nx', 'ex' => $ttl));

if ($rs) {

     //处理更新缓存逻辑

    // ......

    //先判断随机数,是同一个则删除锁

    if ($redis->get($key) == $random) {

        $redis->del($key);

    }

}

以上就是教你正确地使用Redis的SETNX实现锁机制的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

Redis启动与连接的方法

Redis用在哪里

Redis实现秒杀的方法介绍(附代码)

Redis为什么很快

Redis应用场景详细介绍

Redis介绍分布式数据库cap原理

Redis缓存时间一般多少

Redis可以采用什么方式实现限流

Redis源码多少行

Redis之django-Redis使用

更多相关阅读请进入《Redis》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...