• Laravel Redis分布式锁的使用


    创建锁

    use IlluminateSupportFacadesCache;
    
    $lock = Cache::lock('foo', 10);
    if ($lock->get()) {
        // 处理业务逻辑
        sleep(3);
        $lock->release();
    }
    

    获取无限期锁并自动释放

    get 方法可以接收一个闭包。在闭包执行之后,Laravel 将会自动释放锁。

    Cache::lock('foo')->get(function () {
        // 获取无限期锁并自动释放...
    });
    

    在指定时间内获取锁

    use IlluminateContractsCacheLockTimeoutException;
    
    $lock = Cache::lock('foo', 10);
    try {
        $lock->block(5);
        echo "5秒时间内成功获取锁...";
    } catch (LockTimeoutException $e) {
        echo "5秒时间内获取锁失败...";
    } finally {
        optional($lock)->release();
    }
    

    另一种写法:

    Cache::lock('foo', 10)->block(5, function () {
        echo "5秒时间内成功获取锁...";
    });
    

    无视拥有者强制释放锁

    Cache::lock('foo')->forceRelease();
    

    跨进程管理锁

    // 控制器中...
    $podcast = Podcast::find($id);
    $lock = Cache::lock('foo', 120);
    if ($result = $lock->get()) {
        ProcessPodcast::dispatch($podcast, $lock->owner());
    }
    
    // 队列任务中...
    // 使用锁名称和拥有者重新获取锁实例后再释放
    Cache::restoreLock('foo', $this->owner)->release();
    
  • 相关阅读:
    transition
    Java自增陷阱
    不同编码格式中,字节和字符的关系
    表单重复提交
    source folder和package的区别
    @test 测试案例不能添加参数
    http协议content-type
    jdbc的缺点和mybatis的优点
    ==和equals的区别
    spring IOC和AOP
  • 原文地址:https://www.cnblogs.com/danhuang/p/13266960.html
Copyright © 2020-2023  润新知