<?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)