分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

用memcached实现的php锁机制

发布时间:2023-09-06 01:59责任编辑:胡小海关键词:暂无标签
 <?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 ); ???}

原文地址:小景的博客

用memcached实现的php锁机制

原文地址:https://www.cnblogs.com/Dong-Ge/p/9166248.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved