欢迎关注我的公众号:零零糖,让一个贫穷的程序员不靠打代码也能吃饭~
redis实现锁的机制,没有的时候设置,设置过期时间,原子性。
1、设置一个锁
解析:没有设置过期时间,可能导致死锁,需要手动解锁,不好不好~
$rs = $redis->setNX($key, $value);
if ($rs) {
//处理一些逻辑
// ......
//删除锁
$redis->del($key);
}
2、设置一个锁
解析:设置了过期时间,但如果处理一些逻辑时间比锁的时间长,会误删除其他进程的锁,怕怕~
$rs = $redis->set($key, $value, array('nx', 'ex' => $ttl));
if ($rs) {
//处理一些逻辑
// ......
//删除锁
$redis->del($key);
}
3、设置一个锁
解析:用下面这句可以保证原子性,不会死锁,不会误删除其他进程的锁,棒棒哒~
//redis实现锁的机制
//没有的时候设置
//设置过期时间
//用下面这句可以保证原子性
$rs = $redis->set($key, $random, array('nx', 'ex' => $ttl));
if ($rs) {
//处理一些逻辑
// ......
//处理完了,先判断随机数,是同一个进程则删除锁
if ($redis->get($key) == $random) {
$redis->del($key);
}
}
当然,需求不一样、场景不一样,锁的方式和解锁的姿势也不一样,以上仅供参考。
完。
欢迎关注我的公众号:零零糖,让一个贫穷的程序员不靠打代码也能吃饭~