利用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 也是原子的,可以用于秒杀的商品计数器。