设为首页 收藏本站
查看: 1345|回复: 0

[经验分享] memcached维护及其数据遍历实现

[复制链接]

尚未签到

发表于 2015-11-18 14:55:45 | 显示全部楼层 |阅读模式
  原贴:http://iceskysl.1sters.com/?action=show&id=429


memcached维护及其数据遍历实现
Submitted by iceskysl on 2008, November 10, 2:52 AM. 技术归总 | Technic
需要时不时的看看memcached的状态,其自身只提供了get、set等方法啊我们需要使用其提供的方法遍历一下其缓存的内容,其原理请参考《如何对memcache的数据(key-value)进行遍历操作 》和《贴一段遍历memcached缓存对象的小脚本》。
  memcache的stats命令包括:

1.        stats  
2.        stats reset  
3.        stats malloc  
4.        stats maps  
5.        stats sizes  
6.        stats slabs  
7.        stats items  
8.        stats cachedump slab_id limit_num  
9.        stats detail [on|off|dump]

  说说其实现遍历的原理:

  • telnet到192.168.15.225(局域网测试机器)的memcache服务器;
  • 执行stats items命令,可以看到出现 很多的items行。
  • 执行stats cachedump 3 0命令。这里的3表示上面图中items后面的数字,0标示显示全部的数据,如果是1就标示只显示1条。
    下图为执行后的结果,item后面的字符串为key
  • 通过上面列出的key我们就可以遍历所有的数据了,下面我们取出某一条数据,key为Uc!uLh的数据。
  来两个遍历的代码:
1、PHP版
1.        <?php

2.        $host='192.168.15.225';

3.        $port=11211;

4.        $mem=new Memcache();

5.        $mem->connect($host,$port);

6.        $items=$mem->getExtendedStats (‘items’);

7.        $items=$items["$host:$port"]['items'];

8.        for($i=0,$len=count($items);$i<$len;$i++){

9.            $number=$items[$i]['number'];

10.         $str=$mem->getExtendedStats ("cachedump",$number,0);

11.         $line=$str["$host:$port"];

12.         if( is_array($line) && count($line)>0){

13.             foreach($line as $key=>$value){

14.                 echo $key.'=>';

15.                 print_r($mem->get($key));

16.                 echo "/r/n";

17.             }

18.         }

19.     }

  20.     ?>

2、RUby版


  • #!/usr/bin/env ruby  
  • require 'socket'  
  •   
  • # stats  
  • # stats reset  
  • # stats malloc  
  • # stats maps  
  • # stats sizes  
  • # stats slabs  
  • # stats items  
  • # stats cachedump slab_id limit_num  
  • # stats detail [on|off|dump]  
  •   
  • class Memcache  
  •   class << self  
  •     def open(host, port)  
  •       s = TCPSocket.open(host, port)  
  •       yield s if block_given?  
  •     ensure  
  •       s.close if s  
  •     end  
  •    
  •     def command(command_string, s)  
  •       s.send(command_string + "/r/n", 0)  
  •       buff = []  
  •       until ["END", "OK", "DELETE", "ERROR"].include?(line = s.gets.strip) do  
  •         buff << line   
  •       end  
  •       buff  
  •     end  
  •    
  •     def exec(command_string, host = "javaeye", port = 11211)  
  •       open(host, port) { |socket| command(command_string, socket).each {|line| puts line } }  
  •     end  
  •       
  •     def cache_stats(host = "javaeye", port = 11211)  
  •       cache_objects = {}  
  •       open(host, port) do |socket|  
  •         slabs = []  
  •         command("stats items", socket).each do |line|  
  •           slab_id = line.split[1].split(":")[1].to_i  
  •           slabs << slab_id unless slabs.include?(slab_id)  
  •         end  
  •         slabs.each do |slab_id|  
  •           puts "browse slab #{slab_id}..."  
  •           command("stats cachedump #{slab_id} 0", socket).each do |item|  
  •             key = item.split[1].split("/")[0].to_s  
  •             cache_objects.include?(key) ? cache_objects[key] += 1 : cache_objects[key] = 1  
  •           end  
  •         end  
  •       end  
  •       cache_objects.each_pair {|key, value| puts "#{key} : #{value}"}  
  •     end  
  •   end  
  • end  
  •   
  • if ARGV.size == 0  
  •   Memcache.cache_stats  
  • else  
  •   Memcache.exec(ARGV.join(" "))  
  • end  
Tags: memcached
&laquo; 上一篇 | 下一篇 &raquo;
我的推荐:支持RubyOnRails服务器
考虑到很多朋友来信要我推荐好的Rails空间和优惠码,如果你正在找寻支持Rails的空间,不妨试试我使用过的这两款.
1.SliceHost(生产系统性价比最高)
SliceHost是一家很棒的VPS服务商提供诸如Ubuntu、CentOS、Debian 4.0、Fedora9、Gentoo好几种系统发行版选择,可以选择256M、512M、1G等好几种方案,拥有root权限,完全自主,非常稳定且价格在VPS中是最便宜的,适合做生产环境,极力推荐。
如果你感兴趣,按照如下两个方式得到最大优惠:
1.点击优惠的SliceHost过去注册;
2.注册时“Referral email address”输入"iceskysl@gmail.com"即可。
只显示8条记录相关文章
  I hate hardcode configs in plugins like cache_fu (浏览: 71, 评论: 0)
Rails+Memcached,跑起来嗖嗖的 (浏览: 1615, 评论: 1)
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-140804-1-1.html 上篇帖子: memcached之java客户端:spymemcached使用 下篇帖子: 使用memcached进行并发控制(写的非常好)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表