zoukankan      html  css  js  c++  java
  • 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();
    
  • 相关阅读:
    ArcgisServerJS固件位置
    PrintTemplate说明
    地图打印仅地图4X
    地图打印4X
    IIS下设置跨域访问问题--Access-Control-Allow-Origin 站点跨域请求的问题
    javascript的 热点图怎么写
    Flex 加载shp
    Flex 加载dwg
    Flex 加载tiff
    Flex 加载 wmf,svg
  • 原文地址:https://www.cnblogs.com/danhuang/p/13266960.html
Copyright © 2011-2022 走看看