在初始化缓存数据的时候,如果有两个请求进来同时去请求数据,那么会出现数据错乱的情况,这时就需要添加锁来保证唯一性。
/*
* 查看是否有锁*/
$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;
网友评论