/** * memcache对象获取方法 * * @return object MemcacheManager */ public static function instance() { if (!MemcacheManager::$_instance instanceof MemcacheManager) { self::$_instance = new self(); } return self::$_instance; }
/** * 用户缓存管理单例 * * @access public * @param void * @return Memcache 单例对象 */ private static function getCacheInstance() { $get_instance = self::$cache_instance; if (is_null(self::$cache_instance)) { self::$cache_instance = MemcacheManager::instance(); } return self::$cache_instance; }
/** * retrieve a simple key/value pair from memcache * * @param String $key * @param String_type $ns * @param String $bucket */ public static function retrieve($key, $ns = self::DEFAULT_NS, $bucket = self::DEFAULT_BUCKET) { $cache = MemcacheManager::getInstance()->cache; $cache->setBucket($bucket); $value = $cache->get($key); if ($value) { return $value; } }
/** * API:获取大事件信息 * * @access public * @param 无 * @return JsonView 响应json */ public function getBigMessage() { $requestParam = $this->getAllParameters(); Logger::debug('requestParam:' . print_r($requestParam, true)); $requestJsonParam = $this->getDecodedJsonRequest(); Logger::debug('requestJsonParam:' . print_r($requestJsonParam, true)); // 取缓存数据 $cache = MemcacheManager::instance(); $memcacheArr = $cache->get(self::BULLETIN_LIST); if ($memcacheArr) { $messageArr = $memcacheArr; } else { // 读取csv类 $csv = new Parsecsv(); $dir = IniFileManager::getRootDir() . "files/csv/" . self::BULLETIN_LIST . ".csv"; $csv->auto($dir); $messageArr = $csv->data; } return $messageArr; }
## OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ## ## EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ## ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ## ## Author of file: Peter Schmalfeldt ## ################################################################################# /** * @category Memcache Manager * @package MemcacheManager * @author Peter Schmalfeldt <*****@*****.**> * @license http://www.apache.org/licenses/LICENSE-2.0 * @link http://code.google.com/p/memcachemanager/ * @link http://groups.google.com/group/memcachemanager */ include 'classes/class_MemcacheManager.php'; // creat memcache object $mc = new MemcacheManager(); // add servers $mc->addserver('localhost', 11211); $mc->addserver('localhost', 11212); $mc->addserver('localhost', 11213); // create some date to store $init_data = array('username' => 'memcachehater', 'email' => '*****@*****.**', 'displayname' => 'Memcache Hater', 'location' => array('country' => 'USA', 'state' => 'Missouri', 'city' => 'St. Louis')); $replace_data = array('username' => 'memcachelover', 'email' => '*****@*****.**', 'displayname' => 'Memcache Lover', 'location' => array('country' => 'USA', 'state' => 'Oregon', 'city' => 'Portland')); // start making output readable in browser echo '<pre>'; // store data $mc->add('memcachelover', $init_data, 0, true, true, true); // adds the key with JSON encoding, encryption and compression $mc->replace('memcachelover', $replace_data, 0, true, true, true); // replaces the key with JSON encoding, encryption and compression // retrieve data
/** * API:读取CSv * * @access public * @param $file 路径 $str 读取条件OR * @return array() */ public function readCsv($file, $str = null) { //先读缓存,foreach需要的数据,没有找到,在用condition读取CSV $fileName = basename($file, ".csv"); /*$memcached = new Memcache(); $memcached->connect("localhost", 11211); $CharacterDataArr=$memcached->get( $fileName );*/ $cache = MemcacheManager::instance(); $CharacterDataArr = $cache->get($fileName); if (!$CharacterDataArr) { $csv = new Parsecsv(); $csv->conditions = $str; $csv->auto($file); $CharacterDataArr = $csv->data; return $CharacterDataArr; } else { if (is_null($str)) { return $CharacterDataArr; } $conditionArr = explode(" OR ", $str); foreach ($conditionArr as $key => $value) { $condition = explode(" = ", $value); $message[$key][$condition[0]] = $condition[1]; } foreach ($message as $key => $value) { foreach ($value as $key2 => $value2) { foreach ($CharacterDataArr as $key3 => $value3) { if ($value2 == $CharacterDataArr[$key3][$key2]) { $arr[] = $CharacterDataArr[$key3]; } } } } return $arr; } }
/** * deletes object from memcache before deleting it from the db * * @author Matthias Pfefferle * @param Doctrine_Event $pEvent */ public function preDelete(Doctrine_Event $pEvent) { $lInvoker = $pEvent->getInvoker(); MemcacheManager::getInstance()->getCache()->remove($lInvoker->getMemcacheId()); }
/** * API:获取签到信息 * * @access public * @param mixed $login_info 签到缓存信息 * @return $loginArr 返回签到信息数组 */ public function getUserLoginInfo($login_info = "") { // 无初始数据 if ($login_info == "") { $loginArr['con_day'] = 0; $loginArr['total_day'] = 0; // $loginArr['time'] = time(); $loginArr['type'] = 0; } else { // 非当天首次登陆 if ($login_info['time'] > strtotime(date('Y-m-d', time()))) { return false; } $loginArr['con_day'] = $login_info['con_day']; $loginArr['total_day'] = $login_info['total_day']; //$loginArr['time'] = time(); $loginArr['type'] = 0; // // 非连续签到 // if( strtotime( date( 'Y-m-d',time() ) ) - $login_info['check_time'] > 86400 ) // { // $loginArr['con_day'] = 1; // } } // 获取签到奖励内容 $cache = MemcacheManager::instance(); $memcacheArr = $cache->get(self::LOGIN_FILE); if ($memcacheArr) { $messageArr = $memcacheArr; } else { // 读取csv类 $dir = IniFileManager::getRootDir() . "files/csv/" . self::LOGIN_FILE . ".csv"; /*$str = "chest_id = " . 1; $messageArr = Util::readCsv( $dir, $str );*/ $csv = new Parsecsv(); $csv->auto($dir); $messageArr = $csv->data; /*echo "<pre>";var_dump($messageArr);exit; $loginArr['reward'] = $messageArr[0];*/ } /********************* 更新奖励列表 *****************/ // 统计箱子个数 $num = 1; foreach ($messageArr as $key => $value) { if ($value['chest_id'] == $messageArr[$key + 1]['chest_id']) { $rewardNumArr[$value['chest_id']] = ++$num; } else { $num = 1; } } // 随机箱子内容 $num = 0; foreach ($rewardNumArr as $key => $value) { $rewardArr[$key] = $messageArr[$num + rand(0, $value - 1)]; $probabilityArr[$key] = $rewardArr[$key]['probability']; $num = $num + $value; } $checkNum = Util::extractRandomAnswer($probabilityArr); $loginArr['rewardArr']['check'] = $checkNum; $loginArr['rewardArr']['box_info'] = $rewardArr; return $loginArr; }
/** * use our memcache instead database when calling method * * @author Matthias Pfefferle * @param int $pPk * @return array of user objects */ public function retrieveByPkTableProxy($pPk) { $lInvoker = $this->getInvoker(); $lClassName = get_class($lInvoker); $lObject = null; $lMemcacheId = strtolower($lClassName) . "-" . $pPk; // first try GLOBALS cache if (isset($GLOBALS['CACHE'][strtoupper($lClassName)][$pPk])) { $lObject = $GLOBALS['CACHE'][strtoupper($lClassName)][$pPk]; if ($lObject) { $cache = 'yiidGlobalCache'; } } else { // if not found try memcached $lObject = self::getFromMemcache($lMemcacheId); $cache = 'yiidMemcache'; } if ($lObject) { try { sfContext::getInstance()->getLogger()->info('{yiidGlobalCache} found a ' . $lClassName . ' with id ' . $pPk . ' in ' . $cache); } catch (Exception $e) { } // store in GLOBALS cache $GLOBALS['CACHE'][strtoupper($lClassName)][$pPk] = $lObject; return $lObject; } else { $lObject = $lInvoker->getTable()->find($pPk); if ($lObject) { MemcacheManager::getInstance()->getCache()->set($lMemcacheId, serialize($lObject)); $GLOBALS['CACHE'][strtoupper($lClassName)][$pPk] = $lObject; return $lObject; } else { return null; } } }