首页 > php教程 > php手册 > 正文

用memcached实现的php锁机制

php中文网
发布: 2016-06-06 20:11:02
原创
1370人浏览过

?php/** * 使用Memcache实现给进程加锁的类 * * Copyright (C) 2013 JeffJing * * 一些时候需要让系统的某些操作串行化,这个时候就要对这些操作来加上一把锁。 好比你去上厕所, 你要先推厕所门看能否进去,进去的话上锁,其他人就进不来了, 等你拉完粑粑之

 <?php
/**
 * 使用Memcache实现给进程加锁的类
 *
 * Copyright (C) 2013 JeffJing
 *
 * 一些时候需要让系统的某些操作串行化,这个时候就要对这些操作来加上一把锁。 好比你去上厕所, 你要先推厕所门看能否进去,进去的话上锁,其他人就进不来了, 等你拉完粑粑之后把锁打开,这样的话就保证了厕所永远只有1个人, 上厕所的过程是串行化的, 同时只有1个人上。
 * 网上的一些解决方案大多是使用文件的, 我就纳闷了,加锁的时候创建一个文件, 解锁的时候把文件删掉。
 * 我就纳闷: Why not memcached ? 顺手写了这么一个 , 希望对大家"拉粑粑"的这种操作有所帮助
 *
 * 举个栗子:
 * 	$key = '厕锁';
 * 	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 );
	}
登录后复制

声明: 本文采用 cc by-nc-sa 3.0 协议进行授权

转载请注明来源:小景的博客

本文链接地址:http://www.phpv5.com/blog/mem-lock

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号