<?php /** * Memcahceを利用したLockファイルの代わり * 同時に複数のサーバーで利用されることは考慮されていません。 * また、memcacheの再起動によりリセットされるため、重要度の低いものにのみ、利用してください。 * $Id: MemcacheLock.inc,v 1.1 2015/10/08 11:18:56 wanggb Exp $ * @package jp.aimsweb.util */ class MemcacheLock { /** * 対処のキーがロックされているか確認する。 * デフォルトは、有効期間無限 86400(1日)推奨 * @param $key * @param $expire_seconds */ public static function isLocked($key, $expire_seconds = 0) { if (!AIMSWEB_USE_MEMCACHE) { trigger_error("MemcacheLock used with AIMSWEB_USE_MEMCACHE false"); // 誤動作を防ぐために、ロックされていることにする return true; } $memcache = AimswebMemcacheManager::getInstance(); $val = $memcache->get($key); ErrorLogger::doOutput("val:" . $val, 0); if ($val == null) { return false; } // 有効期間無限 if ($expire_seconds <= 0) { return true; } // 文字以外の値がセットされている:たぶんデータが壊れている if (!is_numeric($val)) { return true; } $tmp = $val + $expire_seconds; // 有効期限が切れていた if ($tmp < time()) { return false; } // 期限内 return true; } /** * ロックをセットします。 * すでに値が合った場合も上書きします。 * @param $key * @param $expire_seconds この、ロックが自動で外れる時間。isLockedの有効期間より優先される。 */ public static function setLock($key, $expire_seconds = 0) { if (!AIMSWEB_USE_MEMCACHE) { trigger_error("MemcacheLock used with AIMSWEB_USE_MEMCACHE false"); } $memcache = AimswebMemcacheManager::getInstance(); $now = time(); $memcache->set($key, $now, 0, $expire_seconds); } /** * 対象のロックを解除します。 * @param $key */ public static function deleteLock($key) { if (!AIMSWEB_USE_MEMCACHE) { trigger_error("MemcacheLock used with AIMSWEB_USE_MEMCACHE false"); } $memcache = AimswebMemcacheManager::getInstance(); $memcache->delete($key); } } ?>