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

来源:互联网 发布:淘宝淘工作 兼职可信吗 编辑:程序博客网 时间:2024/05/20 05:26
        缓存是可以在很大程度上提高网站的响应速度和整体性能的工具,但是如果贸然直接修改数据库的数据但是没有更新缓存就很容易使得前端页面上仍然加载脏数据的,因此,对于一个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 0