一、Memcached和Memcache的区别:
网上关于Memcached和Memcache的区别的理解众说纷纭,我个人的理解是:
Memcached是一个内存缓存系统,而Memcache是php的一个扩展,是php用于操作和管理Memcached的工具。如果安装了Memcached但没有安装Memcache,php无法操控Memcached,但是可以使用命令行来操控Memcached;如果安装了Memcache却没安装Memcached,则无法使用。只有同时安装了Memcached和Memcache,才能在PHP中使用Memcached。
以上仅代表个人观点。
网上关于Memcached和Memcache的安装教程有很多,下面是我参考网上教程并动手操作后总结出来的方法,注意,我的操作是基于64位win7系统的。
二、安装memcached:
1. 下载地址:http://pan.baidu.com/s/1gdKbp8R
(这是在网上找的下载地址,我试过,可以下载)
2. 解压下载后的文件,把它放到一个目录中,如D:\memcached。
3. 打开cmd,进入memcached解压后存放的目录,运行命令:
memcached.exe-d install
如果没有意外的话已经安装成功了。
(目录中应该有memcached.exe这个文件)
4. 测试是否安装成功:
打开cmd,进入memcached解压后存放的目录,运行命令:
memcached -h,若安装成功,会出现如下界面:
5. 启动memcached:
打开cmd,进入memcached解压后存放的目录,运行命令:
memcached.exe-d start
这时memcached已经启动,在任务管理器中可以看到这个进程:
6. 连接Memcached:
打开cmd,运行命令:
telnet127.0.0.1 11211
即可连接Memcached。
注:win7中可能会出现“telnet’不是内部或外部命令”的错误,这是因为系统中默认没有安装telnet的缘故,可在“控制面板”->“程序”->“程序和功能”->“打开或关闭Windows功能”中打开“Telnet客户端”。
三、安装memcache的php扩展:
1. 下载地址:http://windows.php.net/downloads/pecl/releases/memcache/3.0.8/
(注意:要下载对应php版本和系统位数的dll文件)
2. 把php_memcache.dll放到php的ext目录下,如:
D:\wamp\bin\php\php5.5.12\ext
3. 打开php.ini,在extension处添加一行代码:
extension=php_memcache.dll
4. 重启服务器。
5. 查看php的extensions服务,php_memcache现在应该可以使用了,即处于打钩状态,之
前是处于叹号状态的,若还处于叹号状态,用鼠标在上面点击一下就好了。
6. 通过代码测试php是否已经可以使用memcached:
$memcache= new Memcache;
$memcache->connect("127.0.0.1",11211);
echo"Memcached's version: " . $memcache->getVersion() . "<br/>";
$data= array(
'url'=> "http://www.cnblogs.com/wujuntian/",
'name' => "编程人,在天涯"
);
$memcache-> set("info",$data,0,10);
$info= $memcache->get("info");
echo'<pre>';
print_r($info);
若能打印出memcache中的信息,则说明php的memcache扩展已安装成功且能使用了!
注意:运行代码时若出现错误Fatal error: Class 'Memcache' not found,有可能是下载的
php_memcache.dll文件与php版本不符,或者与系统位数不符。
我的是64位系统,php版本是5.5.12,下载的是php_memcache-3.0.8-5.5-ts-vc11-x64.zip
这个文件。
四、登陆使用telnet ip 端口号
MemCache设置添加某一个Key值的时候,传入expiry为0表示这个Key值永久有效,这个Key值也会在30天之后失效,见memcache.c的源代码:
[js] viewplaincopy在CODE上查看代码片派生到我的代码片
#defineREALTIME_MAXDELTA 60*60*24*30
static rel_time_trealtime(const time_t exptime) {
if (exptime == 0) return 0;
if (exptime > REALTIME_MAXDELTA){
if (exptime <=process_started)
return (rel_time_t)1;
return (rel_time_t)(exptime -process_started);
} else {
return (rel_time_t)(exptime +current_time);
}
}
这个失效的时间是memcache源码里面写的,开发者没有办法改变MemCache的Key值失效时间为30天这个限制
MemCache指令汇总
上面说过,已知MemCache的某个节点,直接telnet过去,就可以使用各种命令操作MemCache了,下面看下MemCache有哪几种命令:
命 令 作 用
get 返回Key对应的Value值
add 添加一个Key值,没有则添加成功并提示STORED,有则失败并提示NOT_STORED
set 无条件地设置一个Key值,没有就增加,有就覆盖,操作成功提示STORED
replace 按照相应的Key值替换数据,如果Key值不存在则会操作失败
stats 返回MemCache通用统计信息(下面有详细解读)
statsitems 返回各个slab中item的数目和最老的item的年龄(最后一次访问距离现在的秒数)
statsslabs 返回MemCache运行期间创建的每个slab的信息(下面有详细解读)
version 返回当前MemCache版本号
flush_all 清空所有键值,但不会删除items,所以此时MemCache依旧占用内存
quit 关闭连接
stats指令解读
stats是一个比较重要的指令,用于列出当前MemCache服务器的状态,拿一组数据举个例子:
[js] viewplaincopy在CODE上查看代码片派生到我的代码片
STAT pid 1023
STAT uptime21069937
STAT time1447235954
STAT version1.4.5
STAT pointer_size64
STAT rusage_user1167.020934
STAT rusage_system3346.933170
STATcurr_connections 29
STATtotal_connections 21
STATconnection_structures 49
STAT cmd_get 49
STAT cmd_set7458
STAT cmd_flush0
STAT get_hits7401
STAT get_misses57
..(delete、incr、decr、cas的hits和misses数,cas还多一个badval)
STAT auth_cmds0
STAT auth_errors0
STAT bytes_read22026555
STAT bytes_written8930466
STAT limit_maxbytes4134304000
STAT accepting_conns1
STATlisten_disabled_num 0
STAT threads 4
STAT bytes151255336
STAT current_items57146
STAT total_items580656
STAT evicitions0
这些参数反映着MemCache服务器的基本信息,它们的意思是:
参 数 名 作 用
pid MemCache服务器的进程id
uptime 服务器已经运行的秒数
time 服务器当前的UNIX时间戳
version MemCache版本
pointer_size 当前操作系统指针大小,反映了操作系统的位数,64意味着MemCache服务器是64位的
rusage_user 进程的累计用户时间
rusage_system 进程的累计系统时间
curr_connections 当前打开着的连接数
total_connections 当服务器启动以后曾经打开过的连接数
connection_structures 服务器分配的连接构造数
cmd_get get命令总请求次数
cmd_set set命令总请求次数
cmd_flush flush_all命令总请求次数
get_hits 总命中次数,重要,缓存最重要的参数就是缓存命中率,以get_hits/ (get_hits + get_misses)表示,比如这个缓存命中率就是99.2%
get_misses 总未命中次数
auth_cmds 认证命令的处理次数
auth_errors 认证失败的处理次数
bytes_read 总读取的字节数
bytes_written 总发送的字节数
limit_maxbytes 分配给MemCache的内存大小(单位为字节)
accepting_conns 是否已经达到连接的最大值,1表示达到,0表示未达到
listen_disabled_num 统计当前服务器连接数曾经达到最大连接的次数,这个次数应该为0或者接近于0,如果这个数字不断增长,就要小心我们的服务了
threads 当前MemCache总线程数,由于MemCache的线程是基于事件驱动机制的,因此不会一个线程对应一个用户请求
bytes 当前服务器存储的items总字节数
current_items 当前服务器存储的items总数量
total_items 自服务器启动以后存储的items总数量statsslab指令解读