转载:https://blog.csdn.net/mxdzchallpp/article/details/68947509
PHP调用redis进去读写操作,大并发下会出现:读取key1,没有内容则写入内容,但是大并发下会出现同时多个php进程写入的情况,这个时候需要加一个锁,即获取锁的php进程有权限写。
- $lock_key = 'LOCK_PREFIX' . $redis_key;
- $is_lock = $redis->setnx($lock_key, 1); // 加锁
- if($is_lock == true){ // 获取锁权限
- $redis->setex($redis_key, $expire, $data); // 写入内容
- // 释放锁
- $redis->del($lock_key);
- }else{
- return true; // 获取不到锁权限,直接返回
- }
- $lock_key = 'LOCK_PREFIX' . $redis_key;
- $is_lock = $redis->setnx($lock_key, 1); // 加锁
- if($is_lock == true){ // 获取锁权限
- $redis->setex($redis_key, $expire, $data); // 写入内容
- // 释放锁
- $redis->del($lock_key);
- }else{
- // 防止死锁
- if($redis->ttl($lock_key) == -1){
- $redis->expire($lock_key, 5);
- }
- return true; // 获取不到锁权限,直接返回
- }