获取memcache缓存下所有的键值对信息

        缓存是可以在很大程度上提高网站的响应速度和整体性能的工具,但是如果贸然直接修改数据库的数据但是没有更新缓存就很容易使得前端页面上仍然加载脏数据的,因此,对于一个WEB站点来说,缓存内容的管理显得尤为重要,笔者最近做的小项目中用到了memcache,也是时下一个比较流行的分布式缓存管理系统,其中,笔者的站点需要从另外一个站点读取数据并将读到的数据加载至笔者系统的缓存中,笔者希望能够有一个可视化的页面去查看,搜索和修改缓存里的内容,尽管可用于管理memcache的开源站点有很多,但是无奈公司不太信任这些开源网站的安全性,因此笔者试图做一个小页面能够显示站点缓存下所有的内容,以便能够快捷的管理其内容。

其中,在php提供的用于与memcached交互的扩展模块中有memcached与memcache,前者提供方法getAllKeys用于遍历所有Memcached服务器上的key,但是并不保证原子操作,而后者却没有提供任何方法。因此笔者根据官方文档中给出的示例,并结合笔者的分页逻辑,写出一个工具方法,用来获取memcache下所有的KEY-VALUE内容。

该方法适用于单台缓存服务器试图取出所有的键值对!

<?php

	/**
	 * [获取缓存中的信息]
	 * @param  [type] $start [开始索引]
	 * @param  [type] $limit [长度]
	 * @return [type]        [description]
	 */
	function getAllKeyAndValueInCache($start = 0,$limit){
		try{
			global $_MC;
			$list = array();

			$cacheStr = CACHE_SERVER.":".CACHE_PORT;
			$items = $_MC->getExtendedStats('items');
			$items = $items[$cacheStr]['items'];
			$i = 0;
			foreach($items as $key => $values){
				$number = $key;
				$str = $_MC->getExtendedStats("cachedump",$number,0);
				$line = $str[$cacheStr];
				if( is_array($line) && count($line) > 0){
					foreach($line as $key => $value){
						$list[$i] = array(
							'key' => $key,
							'value' => htmlentities(json_encode($_MC->get($key),JSON_UNESCAPED_UNICODE),ENT_QUOTES)
						);

						$i++;
					}
				}
			}

			$result = array();
			$result[0] = array_slice($list, $start, $limit);
			$result[1] = count($list); 

			return $result;

		}catch (Exception $e){
			//抛出异常
		}
	}
?>


不过笔者发现这样使用memcache取出所有键值对儿,性能确实不高,有时还很慢,因此笔者建议,如果试图去管理这些缓存的内容,最好还是直接使用已知的key去拉去缓存中的内容,这样性能是会好很多的!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值