redis 锁 (加锁,判断是否成功,失败的话轮询,等待几秒继续)
三种方式 incr setnx set (自己设计key)
incr (加一)
加锁 key不存在的时候,会先创建key 初始值为0,然后执行incr 加一,当其他请求执行incr 加一的时候,如果返回值大于1说明已经被人加上锁,等待或者轮询,执行完之后 删除锁
$redis->incr($key);
$redis->expire($key, $ttl);
setnx (设置key不存在的值,已经存在失败)
用户A请求过来,setnx设置key,设置成功获取到锁,开始操作,用户B也去设置key值,失败,说明已经加锁,等待,循环获取锁,用户A执行完后,删除key,用户获取到锁
$redis->setNX($key, $value);
$redis->expire($key, $ttl);
set (版本2.6后可以设置过期时间,而且不能覆盖set)
用户A请求过来,set设置key,设置成功获取到锁,开始操作,用户B也去设置key值,失败,说明已经加锁,等待,循环获取锁,用户A执行完后,删除key,用户获取到锁
$redis->set('1one', 'okkkk', array('nx', 'ex' => 10))//nx设置后 不能覆盖添加set
redis自己提供了加锁算法 还像是分布式锁 RedLock