Memcache锁操作---php

<?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 );
    }

原文链接:

小景的博客
http://www.phpv5.com/blog/mem-lock

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,786评论 25 709
  • 这是来自天秤座的诡谲想象力(笑哭)
    夏风澄澈阅读 289评论 0 0
  • 一、教学对象分析 本节课教学对象为小学高年级至初中一年级的学生, 此时学生没有接触过基础物理知识,仅有浅显的生活经...
    王婷婷0105阅读 238评论 0 0
  • 不经意间会和同事或者朋友聊起创业故事,人们好多时候会发现自己辛苦了十年二十年之后最终还是回到了原点,所以偶尔也会发...
    生命狂奔阅读 523评论 0 0
  • 日记中留下的精彩瞬间。 好想穿越回去告诉自己,“快别吃啦~” 意外发现 因为要申报职称,最近开始整理学位证书、获奖...
    莫写时光阅读 513评论 0 0