Memcache (memcache是分版本的,不同的php版本下需要下载相对应的memcache版本)
概念
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度
应用
MemCache缓存系统最主要的就是为了提高动态网页应用,分担数据库检索的压力。对于网站流量比较大的,可以使用memcache缓解数据库的压力,主要的焦点集中在以下两个方面:
1. 使用MemCache作为中间缓存层减少数据库的压力。
2. MemCache分布式的应用
安装
下载memcached-1.2.1-win32.zip。解压放某个盘下面,比如在c:\memcached
以 管理员 身份启动cmd,并切换至memcached.exe文件所在目录下
memcached.exe -d install 安装 memcached.exe -d uninstall 卸载 memcached.exe -d start 启动 memcached.exe -d stop 停止 memcached.exe -h 获取帮助
telnet操作memcache
Telnet 协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力 (现在windows下telne功能没有默认开启,需要在打开或关闭windows功能中打开telnet功能)
连接到memcache telnet 127.0.0.1(服务器) 11211
退出 ctrl+] 然后在telnet 命令行输入 quit
常用操作命令
stats: 当前所有memcached服务器运行的状态信息
add: 添加一个数据到服务器
add 名 压缩标记 存储时间(0表示永久) 存储长度(长度必须是正好不能多也不能少)
值 (值需要换行写,在cmd命令行中只能是字符串类型 (在php中可以是字符串,数组或对象))
set: 替换一个已经存在的数据,如果数据不存在,则和add命令相同
set 名 压缩标记 存储时间 存储长度
值
get: 从服务器端提取指定的数据。
get 名
delete: 删除指定的单个数据,如果要清除所有数据,可以使用flush_all
delete 名
flush_all
stats cachedump 标记 显示记录数 (0表示显示全部):简单遍历
stats items 查看标记
stats cachedump 1 0
stats状态信息
STAT pid 1552 服务进程的进程ID
STAT uptime 3792 服务从启动到当前所经过的时间,单位是秒。
STAT time 1262517674 服务器所在主机当前系统的时间,单位是秒。
STAT version 1.2.6 组件的版本。这里是我当前使用的1.2.6。
STAT pointer_size 32 服务器所在主机操作系统的指针大小,一般为32或64.
STAT curr_items 1 表示存放当前的所有缓存对象的数量。不包括已经从缓存中删除的对象。
STAT total_items 2 表示从启动到当前,系统存储过的所有对象数量,包括已经删除的对象。 STAT bytes 593 表示系统存储缓存对象所使用的存储空间,单位为字节。
STAT curr_connections 2 表示当前系统打开的连接数。
STAT total_connections 28 表示从memcached服务启动到当前时间,系统打开过的连接的总数。
STAT get_hits 2 表示获取数据成功的次数。
STAT get_misses 1 表示获取数据失败的次数。
STAT bytes_read 1284 memcached服务器从网络读取的总的字节数。
STAT bytes_written 5362 memcached服务器发送到网络的总的字节数。
STAT limit_maxbytes 67108864 memcached服务缓存允许使用的最大字节数。默认为67108864字节,也就是64M
PHP操作memcache
启用memcache扩展 : 基于PHP原生开发
或启用memcached扩展 :基于libmemcached开发
php安装memcache扩展
将对应版本的memcache.dll文件放到PHP扩展目录下
修改php.ini 开启memcache库扩展: (php.ini中或许没有这个扩展,自己写一个就好了)
extension_dir = "F:/wamp/php-5.4.45/ext"
extension=php_memcache.dll
检测memcache库扩展是否开启成功 bool extension_loaded('mycache');
连接memcache
实例化memcache类
$memcache=new memcache;
连接memcache服务器
$memcache->connect('127.0.0.1','11211'); (服务器,端口号)
关闭服务器连接
$memcache->close()
增删改查操作
添加 :add("名",值,是否压缩,生存时间)
$memcache->add("test1","This is a test",false,0);
$memcache->add("test2",array("one","two"),MEMCACHE_COMPRESSED,60*60*24*30); $memcache->add("test3",new Test(),MEMCACHE_COMPRESSED,time()+60*60*24*31);
查看:get("名")
$memcache->get("test1");
$memcache->get(array("test1","test2","test3"))
更新:set("名",值,是否压缩,生存时间) 注:名称存在则更新,不存在则为添加,如果只想更新可以使用replace
$memcache->set("test1","This is a test1",false,0);
删除:delete("名" [, int $timeout = 0 ]) 注:$timeout表示多少秒内会被删除,默认0为立即删除 $memcache->delete("test1",5);
分布式memcache
创建分布式memcache服务器连接池
$memcache = new Memcache;
$memcache->addServer('172.16.1.1', 11211);
$memcache->addServer('172.16.1.2', 11211);
$memcache->addServer('172.16.1.3', 11211);