redis--分布式锁; key约束_改进(减少临界资源被多个进程使用)[php]

本文探讨了Redis分布式锁在处理临界资源时的优化策略。通过代码分析,改进了在进程完成处理流程后释放锁的过程,确保只有实际独占资源的进程才能释放锁,从而减少资源的并发使用问题。这一策略旨在保护临界资源免受污染,提高系统的稳定性和安全性。
摘要由CSDN通过智能技术生成

这里的临界资源指的是(获取锁成功的处理流程,不过并不是整个过程都涉及资源的争用情况,因为你也不想坐电梯[自己想去一层的],到了二层的时候才去按一层的按钮,而在按下之前的瞬间电梯已经决定往上走了,因为楼上有人想下去~ hiahia...)

<?php
/*---------------------- 
    上一篇出现的一个问题就是,当因为进程操作时间过长,而导致所自动释放,超时进程又误删了其它进程的锁
    误删这种情况其实并没有继续影响其它进程的操作,而只是让重置锁的状态为空闲,让其它进程有机会去竞争
    进程之间本应串行的访问临界资源,而此时却成为并行的了,这样的操作可能导致程序的最终状态不确定。
------------------------*/


/*---------------------- 而本此修改,并不能解决操作超时的情况,但是可以减少多个进程同时访问临界资源的可能性*/
/**
 * @define lock的定义,对商城商品进行加索
 */

/*----------------- 常量定义*/
define('USER', 'user:');
define('INVENTORY', 'inventory:');
define('MARKET', 'market');

/*----------------- 公共方法*/
function log_($message) 
{
    printf($message.PHP_EOL);
    sleep(1);
}

function getKey($handler, $key, $value, $limited)
{
    $start_ = time();
    try{
        while(time() - $start_ < $limited) {
            $ret = $handler->setNx($key, $value);
            if($ret) {
                $handler->setTimeout($key, $limited);
                return true;
            }
            usleep(100);
        }
        return false;
    } catch(Exception $ex) {
        return false;
    }
}

function delKey($handler, $key, $value) 
{
    $value = $handler->get($key);
    $handler->watch($key);        //删除锁其实也是一个资源争用的过
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值