memcached因为性能的缘故,没有提供遍历整个缓存当中对象的功能,不过memcached也提供了很多命令来监控memcached的状态,例如stats命令就有:
stats
stats reset
stats malloc
stats maps
stats sizes
stats slabs
stats items
stats cachedump slab_id limit_num
stats detail [on|off|dump]
不一一详细解释了,比较有价值的是stats items和stats cachedump,以及stats detail dump这几个命令,用前两条命令,实际上我们可以遍历整个memcached缓存(尽管效率低下),后一条命令则可以显示最近memcached当中对缓存对象的详细操作情况。
因为我想详细了解一下JavaEye在线运行的memcached服务器当中缓存对象的详细情况,所以花了几十分钟用ruby写了一个小脚本,用来方便的统计缓存对象,此外它还可以让你方便的发送stats命令。用法很简单:
1、统计memcached server当中的对象:
./memcached.rb
输出的结果大致是这样的:
Problem : 4564
GroupPost : 5643
User : 27133
Group : 144
...
Post : 44442
PostText : 255286
......
views : 36260
Forum : 27
Category : 15065
可以告诉你每个对象缓存的确切数量,比方说PostText被缓存了25万个对象,页面被缓存了3.6万个。这个统计方法是根据Rails内置的Cache生成的key做的解析,也许你要根据自己的应用调整一下解析代码。
2、统计memcached的对象和对象的大小
./memcached.rb stats sizes
3、监控memcached的缓存操作情况
./memcached.rb stats detail on
./memcached.rb stats detail dump
./memcached.rb stats detail off
以下是该脚本的源代码,写的很粗糙。
#!/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
分享到:
- 2008-10-13 18:07
- 浏览 13656
- 评论(8)
- 论坛回复 / 浏览 (3 / 6110)
- 查看更多
相关推荐
STATS命令 遍历memcached缓存对象(C#)转载之青草堂 出于性能考虑,memcached没有提供遍历功能,不过我们可以通过以下两个stats命令得到所有的缓存对象。 1、stats items 显示各个slab中item的数目。 2、stats ...
memcached缓存使用演示小项目,缓存服务器的搭建,增删改查缓存
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...
这里需要解释说明一下,很多开发者觉得Memcached是一种分布式缓存系统,但是其实Memcached服务端本身是单实例的,只是在客户端实现过程中可以根据存储的主键做分区存储,而这个区就是Memcached服务端的一个或者多个...
memcached 缓存 jar包,tomcat共享缓存可用,java开发数据库缓存也可用。
韩顺平 PHP Memcached缓存技术资料源码笔记图解PPT_Ady
memcached缓存服务器,解压后即可使用,无需安装, 版本:1.2.1
实用缓存操作类,可根据需求实例不同的类 操作简单 实用
memcached 缓存图片demo 博文链接:https://zhangjialu-vip.iteye.com/blog/1167345
memcached缓存很全的文档及说明memcached缓存很全的文档及说明memcached缓存很全的文档及说明
memcached缓存服务器 ,64位安装包 ,内有简单的使用说明
Memcached缓存技术资料源码
memcached-library, 一个与Memcached缓存系统接口的CodeIgniter库 用于CodeIgniter的#Memcached 库##Description这个库是为了帮助一个基于CodeIgniter的项目与 1或者更多的Memcached服务器( ...
memcached-1.2.6-win32-bin
memcached监控 博文链接:https://sosuny.iteye.com/blog/420110
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...
memcached缓存安装配置
memcached缓存编程实战