redis 实现乐观锁

在处理高并发的情况下,会出现重复新增或者更新的情况。可以使用redis实现锁避免重复新增或者更新的情况

<?php
class lock{
//连接redis
static public function redis (){
$redis=new Redis();
$redis->connect('host','port') or die('Con not content redis');
if($redis){
return $redis;
}else{
die('can not connectted to redis');
}
}
//加锁
public function lock($key,$expire=5){
$redis=self::redis();
$is_lock=$redis->setnx($key,time()+$expire);
if(!$is_lock){
$lock_time=$redis->get($key);
//锁已过期,重置
if($lock_time<time()){
$this->unlock($key);
$is_lock=$redis->setnx($key,time()+$expire);
}
}
return $is_lock ? true : false;
}
// 释放锁
public function unlock($key){
$redis=self::redis();
return $redis->del($key);
}
}

继续阅读“redis 实现乐观锁”