前端学PHP之MemCache
前面的话
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。本文将详细介绍MemCache的内容
作用
Memcache是danga的一个项目,最早是LiveJour MemCachenal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用
Memcache是以守护程序方式运行于一个或多个服务器中,随时会接收客户端的连接和操作
MemCache缓存系统最主要的就是为了提高动态网页应用,分担数据库检索的压力。对于网站流量比较大的,可以使用memcache缓解数据库的压力,主要的焦点集中在以下两个方面:1. 使用MemCache作为中间缓存层减少数据库的压力和2. MemCache分布式的应用
安装
1、下载软件,解压后,共以下三个文件
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206110808788-2001758340.jpg)
2、安装到windows服务,打开cmd命令行,进入memcached目录,执行memcached -d install命令,安装服务
[注意]如果在没有安装过的情况下,出现"failed to install service or service already installed"错误,可能是cmd.exe需要用管理员身份运行
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206111246585-1504018878.jpg)
3、启动服务,执行memcached.exe -d start
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206111421507-874475086.jpg)
最后,在计算机->管理->服务中,可以找到memcached服务
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206111616663-517818317.jpg)
管理
memcache的端口号是11211,在启动memcache服务后进行连接
[注意]telnet在windows下默认是不开启的,所以需要手动开启
telnet 127.0.0.1 11211
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206112953319-1284095825.jpg)
进入memcache服务后,输入stats命令,会出现如下所示
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206113210741-298833901.jpg)
stats命令的功能正如其名:转储所连接的memcached实例的当前统计数据。在下例中,执行 stats 命令显示了关于当前 memcached 实例的信息
STAT pid 22459 进程ID STAT uptime 1027046 服务器运行秒数 STAT time 1273043062 服务器当前unix时间戳 STAT version 1.4.4 服务器版本 STAT pointer_size 64 操作系统字大小(这台服务器是64位的) STAT rusage_user 0.040000 进程累计用户时间 STAT rusage_system 0.260000 进程累计系统时间 STAT curr_connections 10 当前打开连接数 STAT total_connections 82 曾打开的连接总数 STAT connection_structures 13 服务器分配的连接结构数 STAT cmd_get 54 执行get命令总数 STAT cmd_set 34 执行set命令总数 STAT cmd_flush 3 指向flush_all命令总数 STAT get_hits 9 get命中次数 STAT get_misses 45 get未命中次数 STAT delete_misses 5 delete未命中次数 STAT delete_hits 1 delete命中次数 STAT incr_misses 0 incr未命中次数 STAT incr_hits 0 incr命中次数 STAT decr_misses 0 decr未命中次数 STAT decr_hits 0 decr命中次数 STAT cas_misses 0 cas未命中次数 STAT cas_hits 0 cas命中次数 STAT cas_badval 0 使用擦拭次数 STAT auth_cmds 0 STAT auth_errors 0 STAT bytes_read 15785 读取字节总数 STAT bytes_written 15222 写入字节总数 STAT limit_maxbytes 1048576 分配的内存数(字节) STAT accepting_conns 1 目前接受的链接数 STAT listen_disabled_num 0 STAT threads 4 线程数 STAT conn_yields 0 STAT bytes 0 存储item字节数 STAT curr_items 0 item个数 STAT total_items 34 item总数 STAT evictions 0 为获取空间删除item的总数
使用命令quit,就可以退出memcache操作界面了
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206113611101-135871100.jpg)
命令
通过使用memcache.exe -h可以查看memcache支持的命令
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206114105866-788236225.jpg)
-p <num> 设置端口号(默认不设置为: 11211) -U <num> UDP监听端口(默认: 11211, 0 时关闭) -l <ip_addr> 绑定地址(默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问) -d 独立进程运行 -d start 启动memcached服务 -d restart 重起memcached服务 -d stop|shutdown 关闭正在运行的memcached服务 -d install 安装memcached服务 -d uninstall 卸载memcached服务 -u <username> 绑定使用指定用于运行进程<username> -m <num> 允许最大内存用量,单位M (默认: 64 MB) -P <file> 将PID写入文件<file>,可以使得后边进行快速进程终止, 需要与-d 一起使用 -M 内存耗尽时返回错误,而不是删除项 -c 最大同时连接数,默认是1024 -f 块大小增长因子,默认是1.25 -n 最小分配空间,key+value+flags默认是48 -h 显示帮助
一般地,memcache使用以下5个常用的命令
stats: 当前所有memcached服务器运行的状态信息 add: 添加一个数据到服务器 set: 替换一个已经存在的数据,如果数据不存在,则和add命令相同。 get: 从服务器端提取指定的数据。 delete: 删除指定的单个数据,如果要清除所有数据,可以使用flush_all指令
关于memcache的错误提示主要有以下三个指令:
ERROR -- 普通错误信息,比如指令错误 CLIENT_ERROR <错误信息> -- 客户端错误 SERVER_ERROR <错误信息> --服务器端错误
命令格式
格式:<命令> <键> <标记> <有效期> <数据长度>
命令:add(添加)、set(修改)、delete(删除)、get(获取)
<键>-key:发送过来指令的key内容
<标记>-flags:调用set指令保存数据时的flags标记
有效期:数据在服务器上的有效期限,如果是0,则数据永远有效,单位是秒
数据的长度:block data 块数据的长度,一般在这个长度结束以后下一行跟着block data数据内容
返回值
发送完数据后,客户端一般等待服务器端的返回,服务器端的返回值包括以下两种:
STORED 数据保存成功 NOT_STORED 数据保存失败,是因为服务器端这个数据key已经存在
下面以add one 1 0 5为例,add表示添加数据,one表示键名,1表示标记,0表示有效期永久,5表示长度为5
回车后输入12345,再回车,表示键值为12345,并保存成功
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206123415444-1530804860.jpg)
通过get one可以找到键名one的相关信息及键值
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206123605507-1306330047.jpg)
然后通过set one将标记改为2
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206124048132-1417510641.jpg)
再通过get one可以找到键名one的相关信息及键值
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206124144897-17893997.jpg)
通过delete one删除one,再通过get one读取one的信息时为空
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206124429647-1826381125.jpg)
一般地,使用memcache并不常用遍历操作,但可以模拟出遍历的行为。首先,先存入5个数据
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206125319147-56515922.jpg)
然后,执行stats items命令,可以看到出现很多的items行。执行stats cachedump 1 0命令。这里的1表示上面图中items后面的数字,0标示显示全部的数据,如果是1就标示只显示1条
![](https://images2015.cnblogs.com/blog/740839/201612/740839-20161206125435397-49937747.jpg)