分布式锁运用

2021-02-24  本文已影响0人  爱上西瓜霜

    在初始化缓存数据的时候,如果有两个请求进来同时去请求数据,那么会出现数据错乱的情况,这时就需要添加锁来保证唯一性。

/*

* 查看是否有锁*/

$lock_key= config('lcok_department_list');

$lock= Redis::get($lock_key);

while ($lock){

//如果有锁,阻塞10毫秒

    usleep(10000);

    $lock= Redis::get($lock_key);

}

$key= config('department_list');

$list= Redis::hgetall($key);

if ($list){

    $list= array_map(function ($val){

        return json_decode($val,true);

    },$list);

    return $list;

}

/* 如果没有缓存,则添加锁*/

Redis::setex($lock_key,1,1);

$list= EDepartment::select(['adminid','title','isdisabled','depid as id'])->get()->toArray();

$list= array_column($list,null,'id');

$hash= array_map(function ($val){

    return json_encode($val,JSON_UNESCAPED_UNICODE);

},$list);

Redis::hmset($key,$hash);

/*设置完缓存,删除锁*/

Redis::del($lock_key);

return $list;

上一篇 下一篇

猜你喜欢

热点阅读