Memcache 命令

这里简单介绍一下Memcache 的用法

参考文档:关于memcache分布式一致性hash

http://www.gosoa.com.cn/%E5%85%B3%E4%BA%8Ememcache%E5%88%86%E5%B8%83%E5%BC%8F%E4%B8%80%E8%87%B4%E6%80%A7hash

保存数据

my $add = $memcached->add( '键', '值', '是否压缩','期限' );//仅当存储空间中不存在键相同的数据时才保存
my $replace = $memcached->replace( '键', '值','是否压缩', '期限' );//仅当存储空间中存在键相同的数据时才保存
my $set = $memcached->set( '键', '值', '是否压缩','期限' );//与add和replace不同,无论何时都保存

获取数据

获取数据可以使用get和get_multi方法。

my $val = $memcached->get('键');
my $val = $memcached->get_multi('键1', '键2', '键3', '键4', '键5');

一次取得多条数据时使用get_multi。get_multi可以非同步地同时取得多个键值, 其速度要比循环调用get快数十倍。

删除数据

删除数据使用delete方法,不过它有个独特的功能。

$memcached->delete('键', '阻塞时间(秒)');

删除第一个参数指定的键的数据。第二个参数指定一个时间值,可以禁止使用同样的键保存新数据。 此功能可以用于防止缓存数据的不完整。但是要注意,set函数忽视该阻塞,照常保存数据

增一和减一操作

可以将memcached上特定的键值作为计数器使用。

my $ret = $memcached->incr('键');
$memcached->add('键', 0) unless defined $ret;

增一和减一是原子操作,但未设置初始值时,不会自动赋成0。因此, 应当进行错误检查,必要时加入初始化操作。

清除所有数据

$mem->flush();

关闭连接

$mem->close();

添加多服务

memcached -m 10 -u root -d -l 127.0.0.1 -p 11212  //添加11212 端口服务(php启动不了11211端口服务,原因未知)

class MyMemcache {

private static $config = array(
  'Time'=>1200,
                  'Host'=>'10.100.100.40',
                  'Port' => '11211',
                  'Prefix'=>''
 );


/**

* 获取Memcache对象
*/
private function getMemcache() {
static $cache = null;
if ($cache == null) 
{
$cache = new Memcache ();
$cache->connect ( self::$config['Memcache'] ['Host'], self::$config['Memcache'] ['Port'] );
}
return $cache;
}
/**
*Memcache::set方法则会直接覆写已经存在的键值。
*param1 $key 键
*param2 $val 值
*return boole
*/
public function set($key, $val, $time = 0) 
{
return empty ( $key )?false:self::getMemcache ()->set ( self::$config['Memcache'] ['Prefix'] . $key, $val, 0, empty($time)?self::$config['Memcache'] ['Time']:$time );
}
/**
*删除一个Memcache上的key值
*param $key 键
*return boole
*/
public function delete($key, $time = 0) 
{
return empty ( $key )?false:self::getMemcache ()->delete ( self::$config['Memcache'] ['Prefix'] . $key ,$time);
}
/**
*方法的作用和Memcache::set方法类似,区别是如果 Memcache::add方法的返回值为false,表示这个key已经存在,而Memcache::set方法则会直接覆写。
*param1 $key 键
*param2 $val 值
*return boole
*/
public function add($key, $val, $time = 0) 
{
return ( empty ( $key ) || empty ( $val ))?false:self::getMemcache ()->add ( self::$config['Memcache'] ['Prefix'] . $key,$val, empty ($time)?self::$config['Memcache'] ['Time']:$time );
}
/**
*Addserver 添加一个可供使用的服务器地址
*param1 $host 主机
*param2 $port 端口
*return boole
*/
public function addServer($host, $port) 
{
return ( empty ( $host )||empty ( $port ))?false:self::getMemcache ()->addServer ( $host, $port ) or die ( "could not add Memcache Server!" );
}
/**
*SetServerParams 方法的作用是在运行时修改服务器的参数
*param1 $host 主机
*param2 $port 端口
*/
public function setServerParams($host, $port) 
{
return (empty ( $host ) || empty ( $port ))?false:self::getMemcache ()->setServerParams ( $host, $port ) or die ( "couldnot Set Memcache ServerParams!" );;
}
/**
*清除所有缓存的数据,但是不会削去使用的内存空间
*/
public function flush() 
{
return self::getMemcache ()->flush ();
}
/**
*方法的作用是获取一个键值
*/
public function get($key) 
{
return empty ( $key )?false:self::getMemcache ()->get ( self::$config['Memcache'] ['Prefix'] . $key );
}
/**
*对一个已有的key进行覆写操作
*param1 $key 键
*param2 $val 值
*param2 $time 自动销毁的时间(可选)
*return boole
*/
public function replace($key, $val,$time=0) 
{
return empty ( $key )?false:self::getMemcache ()->replace ( self::$config ['Memcache'] ['Prefix'] . $key, $val,  empty($time)?self::$config['Memcache'] ['Time']:$time );
}
/**
*GetAll 获取所有缓存数据
*return Array
*/
public function getAll() 
{
$list = array ();
$hp = self::$config['Memcache'] ['Host'].":".self::$config['Memcache'] ['Port'];
$items  = self::getMemcache ()->getExtendedStats ( 'items' );
if(!empty($items [$hp] ['items'])&&is_array($items [$hp] ['items']))
{
foreach ( $items [$hp] ['items'] as $ik => $iv ) 
{
$line = self::getMemcache ()->getExtendedStats ( "cachedump", $ik, 0 );
if (!empty($line [$hp])&&is_array ( $line [$hp] ) ) 
{
foreach ( $line [$hp] as $k => $v ) 
{
$list [$k] = $this->get ( $k );
}
}
}
}
return $list;
}
/**
*以$Prefix为前缀的所有缓存数据
*注意:$Prefix不包含$WebConfig['Memcache']['Prefix']的字符串
*param String
*return Array
*/
public function getAllPrefix($Prefix = null) 
{
$list = array ();
$all  = $this->getAll();
foreach ($all as $k=>$v)
{
if (substr ( $k, 0, strlen ( $Prefix ) ) === $Prefix) 
{
$list [$k] = $v;
}
}
return  $v;
}
/**

* 删除带前缀的缓存
*/
public function delByPrefix($Prefix = null) 
{
$all    = $this->getAll();
$Prefix = empty($Prefix)?self::$config['Memcache'] ['Prefix']:$Prefix;
foreach ($all as $k=>$v)
{
if (substr ( $k, 0, strlen ( $Prefix ) ) === $Prefix) 
{
if(self::getMemcache ()->delete ( $k ,0))
{
   echo "删除缓存(".$k.")成功!</br>";
}else{
   echo "删除缓存(".$k.")失败!</br>";
}
}
}
}
    /**

* 删除带前缀的缓存
*/
public function delAll() 
{
$all    = $this->getAll();
foreach ($all as $k=>$v)
{
if(self::getMemcache ()->delete ( $k ,0))
{
   echo "删除缓存(".$k.")成功!</br>";
}else{
   echo "删除缓存(".$k.")失败!</br>";
}
}
echo "清理结束!</br>";
}
/**
*关闭Memcache
*/
public function close() 
{
return self::getMemcache ()->close ();
}
public static function getInstance() 
{
static $class = null;
if ($class == null) {
$class = new self();
}
return $class;

}

/**

*GetAll 获取所有缓存数据

*return Array

*/

public function getAll() {

$arr = array ();

global $WebConfig;

$hp = "{$WebConfig ['Memcache'] ['Host']}:{$WebConfig ['Memcache'] ['Port']}";

$getMemcache = self::getMemcache ();

$items = $getMemcache->getExtendedStats ( 'items' );

if(!empty($items [$hp] ['items'])&&is_array($items [$hp] ['items'])){

foreach ( $items [$hp] ['items'] as $ik => $iv ) {

$line = $getMemcache->getExtendedStats ( "cachedump", $ik, 0 );

if (!empty($line [$hp])&&is_array ( $line [$hp] ) ) {

foreach ( $line [$hp] as $k => $v ) {

$arr [$k] = $getMemcache->get ( $k );

}

}

}

}


return $arr;

}

/**

*以$Prefix为前缀的所有缓存数据

*注意:$Prefix不包含$WebConfig['Memcache']['Prefix']的字符串

*param String

*return Array

*/

public function getAllPrefix($Prefix = null) {

global $WebConfig;

$arr = array ();

if(empty($Prefix)){

   $Prefix = $WebConfig ['Memcache'] ['Prefix'] ;

}

$hp = "{$WebConfig ['Memcache'] ['Host']}:{$WebConfig ['Memcache'] ['Port']}";

$getMemcache = self::getMemcache ();

$items = $getMemcache->getExtendedStats ( 'items' );

if(!empty($items [$hp] ['items'])&&is_array($items [$hp] ['items'])){

foreach ( $items [$hp] ['items'] as $ik => $iv ) {

$line = $getMemcache->getExtendedStats ( "cachedump", $ik, 0 );

if (!empty($line [$hp])&&is_array ( $line [$hp] ) ) {

foreach ( $line [$hp] as $k => $v ) {

if (substr ( $k, 0, strlen ( $Prefix ) ) === $Prefix) {

$arr [$k] = $getMemcache->get ( $k );

}

}

}

}

}

return $arr;

}

/**

* 删除带前缀的缓存

*/

public function flushByPrefix($Prefix = null) {

global $WebConfig;

$arr = array ();

if(empty($Prefix)){

   $Prefix = $WebConfig ['Memcache'] ['Prefix'] ;

}

$hp = "{$WebConfig ['Memcache'] ['Host']}:{$WebConfig ['Memcache'] ['Port']}";

$getMemcache = self::getMemcache ();

$items = $getMemcache->getExtendedStats ( 'items' );

if(!empty($items [$hp] ['items'])&&is_array($items [$hp] ['items'])){

foreach ( $items [$hp] ['items'] as $ik => $iv ) {

$line = $getMemcache->getExtendedStats ( "cachedump", $ik, 0 );

if (!empty($line [$hp])&&is_array ( $line [$hp] ) ) {

foreach ( $line [$hp] as $k => $v ) {

if (substr ( $k, 0, strlen ( $Prefix ) ) === $Prefix) {

if($getMemcache->delete ( $k ,0)){

   echo "删除缓存(".$k.")成功!</br>";

}else{

   echo "删除缓存(".$k.")失败!</br>";

}

}

}

}

}

  }

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值