redis怎样锁比较好

欢迎关注我的公众号:零零糖,让一个贫穷的程序员不靠打代码也能吃饭~

零零糖公众号

 

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);
    }
}

 

 

当然,需求不一样、场景不一样,锁的方式和解锁的姿势也不一样,以上仅供参考。

 

完。

 

欢迎关注我的公众号:零零糖,让一个贫穷的程序员不靠打代码也能吃饭~

零零糖公众号

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值