利用memcached实现分布式锁

一  需求场景:

(1) 需要限制用户创建提现订单的频率:目的一是防止前端bug引起的用户重复提交;二是防止并发攻击绕过提现策略(第一次提现和第二次提现门槛可能不同)。

(2) 需要限制秒杀下同一用户抢中多个商品

二 实现方法,利用memcached 的 add() 方法,php伪代码如下

funciton check_lock($key)
{
        $catch_obj = new CacheUtil();
        if ($catch_obj->get($key))
        {
            throw new Exception();  // 资源被占用,直接抛出异常
        }
        else
        {
            $result = $catch_obj->add($key, $value, $expire_time); 
            if($result === false)
            {
                throw new Exception(); // 加锁失败,说明资源已经被占使用抛出异常
            }
        }
        retun $result;
}

 此外,memcached 的 incr 和 decr 也是原子的,可以用于秒杀的商品计数器。

原文地址:https://www.cnblogs.com/smallrookie/p/7485668.html