php memcached 加锁,Memcache锁操作---php

/**

* 使用Memcache实现给进程加锁的类

*

* Copyright (C) 2013 JeffJing

*

* 一些时候需要让系统的某些操作串行化,这个时候就要对这些操作来加上一把锁。 好比你去上厕所, 你要先推厕所门看能否进去,进去的话上锁,其他人就进不来了, 等你拉完粑粑之后把锁打开,这样的话就保证了厕所永远只有1个人, 上厕所的过程是串行化的, 同时只有1个人上。

* 网上的一些解决方案大多是使用文件的, 我就纳闷了,加锁的时候创建一个文件, 解锁的时候把文件删掉。

* 我就纳闷: Why not memcached ? 而memcached的add操作专门是为这种并发的场景而生的, 当key不存在的时候会创建一个key,存在的话返回false. 顺手写了这么一个 , 希望对大家"拉粑粑"的这种操作有所帮助

*

* 举个栗子:

* $key = '厕锁1号坑';

* if(MemLock::addLoack($key)) {

* //拉粑粑喽,pu~pu~~~~~

* MemLock::releaseLock($key);

* } else {

* //不好意思, 厕所有人啦!!

* }

*

*/

class MemLock {

private static $memcache = null;

/**

* 获取memcached连接

*

* @return Memcached

*/

public static function getConnection() {

if (! isset ( self::$memcache )) {

self::$memcache = new Memcache ();

self::$memcache->connect ( '127.0.0.1', 11211 );

}

return self::$memcache;

}

/**

* 加锁

*

* @param $key 锁关键字

* @param $expireTime 超时时间, 当进程在锁定后出错,这样永远不会释放锁了,只能等到缓存失效

*

* @return boolean true 成功获取到锁 false 获取锁失败

*/

public static function addLock($key, $expireTime = 120) {

$memcache = self::getConnection ();

if($memcache->add($key, 1, false, $expireTime)) {

return true;

}

return false;

}

/**

* 释放锁

*

* @param $key 锁关键字

*

* @return boolean true 释放成功 false 释放失败

*/

public static function releaseLock($key) {

$memcache = self::getConnection ();

return $memcache->delete ( $key );

}

原文链接:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值