Files
OMS/app/base/lib/cache/memcached.php
2025-12-28 23:13:25 +08:00

160 lines
4.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Copyright © ShopeX http://www.shopex.cn. All rights reserved.
* See LICENSE file for license details.
*/
/*
* @package base
* @copyright Copyright (c) 2010, shopex. inc
* @author edwin.lzh@gmail.com
* @license
*/
class base_cache_memcached extends base_cache_abstract implements base_interface_cache
{
static private $_cacheObj = null;
function __construct()
{
$this->connect();
$this->check_vary_list();
}//End Function
/**
* connect
* @return mixed 返回值
*/
public function connect()
{
if(!isset(self::$_cacheObj)){
if(defined('CACHE_MEMCACHE_CONFIG') && constant('CACHE_MEMCACHE_CONFIG')){
self::$_cacheObj = new Memcached;
$config = explode(',', CACHE_MEMCACHE_CONFIG);
foreach($config AS $row){
$row = trim($row);
if(strpos($row, 'unix://') === 0){
//self::$_cacheObj->addServer($row, 0); todo:memcached不支持unix://
}else{
$tmp = explode(':', $row);
self::$_cacheObj->addServer($tmp[0], $tmp[1]);
}
}
}else{
trigger_error('can\'t load CACHE_MEMCACHE_CONFIG, please check it', E_USER_ERROR);
}
}
}//End Function
/**
* fetch
* @param mixed $key key
* @param mixed $result result
* @return mixed 返回值
*/
public function fetch($key, &$result)
{
$result = self::$_cacheObj->get($key);
if(self::$_cacheObj->getResultCode() == Memcached::RES_NOTFOUND){
return false;
}else{
return true;
}
}//End Function
/**
* store
* @param mixed $key key
* @param mixed $value value
* @param mixed $ttl ttl
* @return mixed 返回值
*/
public function store($key, $value, $ttl=0)
{
return self::$_cacheObj->set($key, $value, $ttl);
}//End Function
/**
* status
* @return mixed 返回值
*/
public function status()
{
$status = self::$_cacheObj->getStats();
foreach($status AS $key=>$value){
$return['服务器'] = $key;
$return['缓存获取'] = $value['cmd_get'];
$return['缓存存储'] = $value['cmd_set'];
$return['可使用缓存'] = $value['limit_maxbytes'];
}
return $return;
}//End Function
/**
* 是否支持同步的自增单号处理
*/
public function supportUUID() {
return true;
}
/**
* 累加
*/
public function increment($key, $offset=1)
{
$ret = self::$_cacheObj->increment($key, $offset);
if ($ret === false) {
if(self::$_cacheObj->getResultCode() == Memcached::RES_NOTFOUND){
//key 在memcache 中不存在,需创建
if (self::$_cacheObj->set($key, $offset, 86400*32)) {
$ret = $offset;
} else {
$ret = false;
}
}
}
return $ret;
}//End Function
/**
* 递减
*/
public function decrement($key, $offset=1)
{
$ret = self::$_cacheObj->decrement($key, $offset);
if ($ret === false) {
if(self::$_cacheObj->getResultCode() == Memcached::RES_NOTFOUND){
//key 在memcache 中不存在,需创建
$value = 0 - $offset;
if (self::$_cacheObj->set($key, $value, 86400*32)) {
$ret = $value;
} else {
$ret = false;
}
}
}
return $ret;
}//End Function
/**
* 初始化自增ID值
*
* @return void
* @author
*/
public function setcr($key, $value, $ttl=0)
{
return self::$_cacheObj->set($key, $value, $ttl);
}
}//End Class