<?php /** * Memcached(内存缓存) * 高性能分布式内存对象缓存系统(通过内存维护一个巨大的hash表(key=>value)) * 内存维护软件(减少IO 150k 开源) * http://localhost:11211 * * memcached基于libevent事件库 * linux: * 1.安装libevent * 2.安装memcached并指定libevent的位置 * 3.使用: * 启动:memcached -d -m 128 -l 192.168.0.1 -p 11211 -u root * 停止:kill cat /tmp/memcached.pid * killall memcached * windows: * 使用编译完成的软件 * 1.安装到系统服务中: * 在doc中:执行此软件 memcached.exe -d install(如果提示错误,要找到cmd.exe用管理员身份打开) * 2.卸载: * 在doc中:执行此软件 memcached.exe -d uninstall * 3.启动服务:(默认ip是本机,端口是11211) * memcached.exe -d start * memcached.exe -d -m 128 -l 127.0.0.1 -p 11211 start 指定参数 * 配置参数: * -p 监听端口 * -l 链接的ip地址,默认是本机 * -d start 启动memcached服务 * -d restart 重启memcached服务 * -d stop|shutdown 关闭正在运行的memcached服务 * -d install 安装memcached服务 * -d uninstall 卸载memcached服务 * -u 以什么身份运行(仅在以root运行的时候有效) * -m 最大使用内存,单位是MB,默认是64MB,最大应该是2G * -M 内存耗尽时返回错误,而不是删除项 * -c 最大同时连接数,默认是1024 * -f 块大小增长因子,默认是1.25 * -n 最小分配空间,key+value+float 默认是48 * -h 显示帮助 * * 操作memcached(命令方式telnet作为客户端) * telnet localhost 11211 ---memcached * * php配置memcached文件:在ext中加入:php_memcache.dll(对于的版本要正确) * 并修改php.ini扩展 * extension=php_memcache.dll * [Memcache] * memcache.allow_failover = 1 * memcache.max_failover_attempts=20 * memcache.chunk_size =8192 * memcache.default_port = 11211 * * Memcache面向对象的常用接口包括: * Memcache::connect 打开一个到memcache的链接 * Memcache::pconnect 打开一个到memcache的长连接 * Memcache::close 关闭一个Memcache的链接 * Memcache::set 保存数据到memcache的服务器 * Memcache::add 添加数据到memcache的服务器 * Memcache::get 提取一个已保存在memcache的服务器数据 * Memcache::replace 替换一个已经存在memcache服务器上的项目(功能类似memcache::set) * Memcache::delete 从Memcache服务器上删除一个保存的项目 * Memcache::flush 刷新所以Memcache服务器上保存的项目(类似于删除所有) * Memcache::getStats 获取当前memcache服务器运行的状态 * Memcache::addServer 分布式服务器添加一个服务器 * * * 何时何处使用memcache * 一、数据库读出来的数据(select)使用memcache处理 * 二、在会话控制session中使用 * * memcache的安全建议: * 1.内网访问: * memcached -d -u root -l 192.168.0.111 -p 11211 * 2.设置防火墙: * iptables -A INPUT -p tcp -s 192.168.1.111 -dport 11211 -j ACCEPT * iptables -A INPUT -p udp -s 192.168.1.111 -dport 11211 -j ACCEPT * */ //调用memcache的测试的方法 //memcacheTest(); //调用存储查询语句的方法 memcacheSQL(); /** * 查询数据库 * 缓存查询的数据放入memcache中 * 注意: * 1.同一个项目的安装两次,key要有不同的前缀 * 2.sql语句可以作为缓存的下标(防止sql暴漏?) */ function memcacheSQL(){ //链接数据库存储select查询语句 //创建Memcache服务对象 $mem = new Memcache; $mem->connect("localhost",11211); $sql = "select * from users where id <12"; $key = md5($sql); $data = $mem->get($key); if (!$data) { $mysql = new mysqli("localhost","root","root","hibernate"); $result = $mysql->query($sql); $data = array(); while ($row = $result->fetch_assoc()){ $data[]=$row; } $result->free(); $mysql->close(); $mem->set($key,$data,MEMCACHE_COMPRESSED,60); echo $sql; } echo "<pre>"; print_r($data); echo "</pre>"; $mem->close(); } /** * memcache服务器 * 数据测试 */ function memcacheTest(){ //创建Memcache服务对象 $mem = new Memcache; $mem->connect("localhost",11211); //添加多服务器 //$mem->addServer("www.sid.com",11221); //$mem->addServer("192.167.1.112",11211); //添加 $mem->add("mystr","this is a memcache test!",MEMCACHE_COMPRESSED,60); //修改 $mem->set("mystr","this is a update memcache test!",MEMCACHE_COMPRESSED,60); //获取 $str = $mem->get("mystr"); echo $str."<br>"; //添加数组 $mem->add("myarr",array("asdfsa","sdfsdf"),MEMCACHE_COMPRESSED,60); //获取 $str = $mem->get("myarr"); echo $str."<br>"; //添加对象 class Per{ var $name = "san"; var $age=12; } $mem->add("myper",new Per,MEMCACHE_COMPRESSED,60); //获取 $str = $mem->get("myper"); echo $str->name."<br>"; //获取服务器的相关信息 echo $mem->getVersion()."<br>"; echo "<pre>"; echo var_dump($mem->getStats()); echo "</pre>"; $mem->flush(); $mem->close(); } ?>
附php的memcached扩展库下载(php5.2和php5.3)