memcached 的基本概念
memcached 是一个高效的分布式的内存对象缓存系统 ,他可以支持把各种php的数据(array,对象,基本数据类型)放入到它管理的内存中.
使用memached的好处是什么?
针对上面的的要求有三种方案
1. 传统的方法
<?php
$stu_id=$_GET[‘stu_id’];
//查询数据库
smaryt->assign(“view”);
?>
2. 页面静态化
<?php
$stu_id=$_GET[‘stu_id’];
$html_file=”stu_id1.html”
if(file_exitsts($html_file)){
//显示
exit
}
//查询数据库
//缓存.
smaryt->assign(“view”);
?>
3. 使用内存缓存
<?php
$stu_id=$_GET[‘stu_id’];
//到memcached缓存中,看看有没有学生信息
$mem=new Memcache;
if($info=$mem->get($stu_id)){
//取出学生信息
echo $info;
exit
}
//到数据库查询
ob_start();
$conn=....
.....
echo “..”;
//把从数据库中获取的结果,放入memcache中
$mem->add($stu_id,ob_get_contents(),MEMCACHE_COMPRESSED,60*60*24);
?>
访问速度
数据库<文件<内存
原理图
安装步骤
①下载memcached软件
②将memcached软件拷贝到某个目录,最好放在php开发环境目录下,便于管理
③安装 memcached –d install [卸载使用 memcached -d uninstall]
④启动 memcached 服务
(1)直接通过界面启动该服务
(2)在控制台下启动 memcached –d start [命令一览表]
⑤查看memcached 服务是否启动成功! 默认端口11211
我们一起看看memcached 常用的命令.
特别说明;如果你的网站,需要的memcached 的内存大于64m,应当这样启动
memcached –m 256m –d start LRU
如果你希望换一个端口
memcached -d -m 30 -l 127.0.0.1 -p 9000 -d start
面试题,请举例5个常用端口
80 apache/iis
21 ftp
23 telnet
3306 mysql
1521 oracle
1433 sql server
8080 tomcat
使用方法
telnet -----> memcached缓存系统 (教学)
crud (create/read/upate/delete)
添加:
1. 连接到memcached
telnet 192.168.1.100 11211
add name 0 60 5 [说明 add 是指令名 name 是key的名字 (是以key/value存放), 0 标志, 60 表示数据存放 60s 5表示 放入多大数据 ], 如果一个key已经存在,再放入是失败的.
get name [获取 name的值]
//更新
set name 0 60 5 [如果 name 这个key存在,就是更新, 如果key不存在,就是添加]
//删除
delete key值
//其它用法看手册
使用memcache 扩展(一堆函数)来操作 memcached缓存系统
① 在php.ini 中配置 extension
放入到 php/ ext /目录
② 打开extension
;这里启用memcache.dll扩展
extension=php_memcache.dll
③ 编程测试
代码(测试放入php的各种数据类型)
<?php
//1.实例化一个Memcache对象
$mem=new Memcache;
//2. 连接到指定的memcache中
$mem->connect("127.0.0.1",11211);
//0表示不压缩数据,如果使用压缩MEMCACHE_COMPRESSED
if(!$mem->add("name","shunping",0,30)){
echo "有哥们放入了";
}else{
echo "ok!";
}
//可以放入数值
if(!$mem->add("age",100,0,30)){
echo "age有哥们放入了";
}else{
echo "ok!";
}
//可以放入boolean
if(!$mem->set("ok",true,0,30)){
echo "ok有哥们放入了";
}else{
echo "ok!";
}
//放入数组
$arr1=array("aa"=>"北京","bb"=>"天津");
//对数组进行序列化,在网络传输的时候,为了保证,数据类型的不丢失,
//先序列化,再发生.
//$arr1=serialize($arr1);
$arr2=json_encode($arr1);
print_r($arr2);
$mem->add("arr",$arr1,MEMCACHE_COMPRESSED,100);
//对象
require "Person.class.php";
$person=new Person(10,"xiaoming");
$mem->add("per1",$person,MEMCACHE_COMPRESSED,100);
//取出
$per2=$mem->get("per1");
var_dump($per2);
echo "对象名字=".$per2->name;
//string, int,float, boolean array object null resource
//不能把resource 类型放入到memcache
$con=mysql_connect("localhost","root","root");
echo "<br/>";
var_dump($con);
$mem->add("mylink",$con);
?>
.
代码: 用于获取各种数据
<?php
//获取
$mem=new Memcache;
$mem->connect("localhost",11211);
if($val=$mem->get("name")){
echo "val=$val";
}else{
echo "没有这个值";
}
/*获取数值*/
if($val=$mem->get("age")){
echo "age=$val";
}else{
echo "没有这个值";
}
/*布尔值*/
echo "<br/>";
$val=$mem->get("ok");
echo "ok=$val";
echo "<br/>";
$arr1=$mem->get("arr");
echo "<pre>";
var_dump($arr1);
echo "</pre>";
echo "<br/>对象的值..";
require "Person.class.php";
//取出
$per2=$mem->get("per1");
var_dump($per2);
echo "对象名字=".$per2->name;
echo "<br/>连接";
var_dump( $mem->get("mylink"));
?>
结论: //string, int,float, boolean array object null resource 中除了 resource 不能存放,其它都可以.
分析memcache价值
补充: 关于如何使用多个memcached 缓存服务器.
<?php
$mem=new Memcache();
//如果我们网站,需要多个memached缓存系统.
//$mem->connect("localhost",11211); (立即向localhost的11211端口发出连接)
$mem->addServer("192.168.1.100",11211);//256 ->10m
$mem->addServer("192.168.1.200",11211);
$mem->addServer("192.168.1.222",11211);
//创建多个memcache服务使用.
$mem->add("name","zs",0,100);
?>
//使用socket来操作我们的memcached缓存系统.
代码:
<?php
require "memcached-client.php";
$mc = new memcached(array(
'servers' => array('127.0.0.1:11211'), //如果有多个memcached服务器使用可以使用,号间隔添加
'debug' => false,
'compress_threshold' => 10240,
'persistant' => true));
$mc->add('key', '顺平');
// $mc->replace('key', 'some random string');
$val = $mc->get('key');
echo "key=".$val;
?>
面试题: 请说明memcached 机制:
1. 是c/s结构,使用简单文本通讯
2. 基于libevent处理并发
3. 是内存缓存
4. 基于客户端的分布式
5.
6. .
php程序(1. memcache 扩展 2. memcached 扩展 (php_memcached.dll), 3. 使用socket访问) ---->memcachd 缓存系统
memcached 的细节
1. 生命周期, 是在add 数据的时候指定的.
2. 如何配置,将session数据,自动保存到memcached服务器中.
思路 : 在默认情况下 session 数据是放在文件中. c:/windows/temp
步骤:
① 在php.ini 文件中
;把session数据放入memcache
session.save_handler = memcache
;这里指定放到哪个memcached服务器
session.save_path = "tcp://127.0.0.1:11211"
使用
<?php
session_start();
$_SESSION['name']='xiaohong';
//现在我们希望把session数据放入到memcached缓存系统中.
echo session_id()."<br/>";
echo $_SESSION['name'];
?>
小结: 我们只需要在php.ini中作一个配置,然后再使用session时候,还是老规矩,只是这个时候,我们的session数据,已经放到memcached中
memcache的安全性
windows 下,设置防火墙.
原理图:
linux下
iptables -a input -p 协议 -s 可以访问ip -dport 端口 -j ACCEPT
小结如何使用memcached 的因素:
--我自己的一个小结如何决定是否使用memcached
--如果是一个小网站,pv值不大,就不考虑使用memcache了
--变化频繁,查询频繁,但是不一定写入数据库(适合memcached)(用户在线状态.)
--变化频繁, 一变化就要入库[比如股票,金融.](不适合memcached)
--变化不频繁,查询频繁,不管如不入库,都比较适合memcache。(新浪的新闻频道)
memcached 是一个高效的分布式的内存对象缓存系统 ,他可以支持把各种php的数据(array,对象,基本数据类型)放入到它管理的内存中.
使用memached的好处是什么?
针对上面的的要求有三种方案
1. 传统的方法
<?php
$stu_id=$_GET[‘stu_id’];
//查询数据库
smaryt->assign(“view”);
?>
2. 页面静态化
<?php
$stu_id=$_GET[‘stu_id’];
$html_file=”stu_id1.html”
if(file_exitsts($html_file)){
//显示
exit
}
//查询数据库
//缓存.
smaryt->assign(“view”);
?>
3. 使用内存缓存
<?php
$stu_id=$_GET[‘stu_id’];
//到memcached缓存中,看看有没有学生信息
$mem=new Memcache;
if($info=$mem->get($stu_id)){
//取出学生信息
echo $info;
exit
}
//到数据库查询
ob_start();
$conn=....
.....
echo “..”;
//把从数据库中获取的结果,放入memcache中
$mem->add($stu_id,ob_get_contents(),MEMCACHE_COMPRESSED,60*60*24);
?>
访问速度
数据库<文件<内存
原理图
安装步骤
①下载memcached软件
②将memcached软件拷贝到某个目录,最好放在php开发环境目录下,便于管理
③安装 memcached –d install [卸载使用 memcached -d uninstall]
④启动 memcached 服务
(1)直接通过界面启动该服务
(2)在控制台下启动 memcached –d start [命令一览表]
⑤查看memcached 服务是否启动成功! 默认端口11211
我们一起看看memcached 常用的命令.
特别说明;如果你的网站,需要的memcached 的内存大于64m,应当这样启动
memcached –m 256m –d start LRU
如果你希望换一个端口
memcached -d -m 30 -l 127.0.0.1 -p 9000 -d start
面试题,请举例5个常用端口
80 apache/iis
21 ftp
23 telnet
3306 mysql
1521 oracle
1433 sql server
8080 tomcat
使用方法
telnet -----> memcached缓存系统 (教学)
crud (create/read/upate/delete)
添加:
1. 连接到memcached
telnet 192.168.1.100 11211
add name 0 60 5 [说明 add 是指令名 name 是key的名字 (是以key/value存放), 0 标志, 60 表示数据存放 60s 5表示 放入多大数据 ], 如果一个key已经存在,再放入是失败的.
get name [获取 name的值]
//更新
set name 0 60 5 [如果 name 这个key存在,就是更新, 如果key不存在,就是添加]
//删除
delete key值
//其它用法看手册
使用memcache 扩展(一堆函数)来操作 memcached缓存系统
① 在php.ini 中配置 extension
放入到 php/ ext /目录
② 打开extension
;这里启用memcache.dll扩展
extension=php_memcache.dll
③ 编程测试
代码(测试放入php的各种数据类型)
<?php
//1.实例化一个Memcache对象
$mem=new Memcache;
//2. 连接到指定的memcache中
$mem->connect("127.0.0.1",11211);
//0表示不压缩数据,如果使用压缩MEMCACHE_COMPRESSED
if(!$mem->add("name","shunping",0,30)){
echo "有哥们放入了";
}else{
echo "ok!";
}
//可以放入数值
if(!$mem->add("age",100,0,30)){
echo "age有哥们放入了";
}else{
echo "ok!";
}
//可以放入boolean
if(!$mem->set("ok",true,0,30)){
echo "ok有哥们放入了";
}else{
echo "ok!";
}
//放入数组
$arr1=array("aa"=>"北京","bb"=>"天津");
//对数组进行序列化,在网络传输的时候,为了保证,数据类型的不丢失,
//先序列化,再发生.
//$arr1=serialize($arr1);
$arr2=json_encode($arr1);
print_r($arr2);
$mem->add("arr",$arr1,MEMCACHE_COMPRESSED,100);
//对象
require "Person.class.php";
$person=new Person(10,"xiaoming");
$mem->add("per1",$person,MEMCACHE_COMPRESSED,100);
//取出
$per2=$mem->get("per1");
var_dump($per2);
echo "对象名字=".$per2->name;
//string, int,float, boolean array object null resource
//不能把resource 类型放入到memcache
$con=mysql_connect("localhost","root","root");
echo "<br/>";
var_dump($con);
$mem->add("mylink",$con);
?>
.
代码: 用于获取各种数据
<?php
//获取
$mem=new Memcache;
$mem->connect("localhost",11211);
if($val=$mem->get("name")){
echo "val=$val";
}else{
echo "没有这个值";
}
/*获取数值*/
if($val=$mem->get("age")){
echo "age=$val";
}else{
echo "没有这个值";
}
/*布尔值*/
echo "<br/>";
$val=$mem->get("ok");
echo "ok=$val";
echo "<br/>";
$arr1=$mem->get("arr");
echo "<pre>";
var_dump($arr1);
echo "</pre>";
echo "<br/>对象的值..";
require "Person.class.php";
//取出
$per2=$mem->get("per1");
var_dump($per2);
echo "对象名字=".$per2->name;
echo "<br/>连接";
var_dump( $mem->get("mylink"));
?>
结论: //string, int,float, boolean array object null resource 中除了 resource 不能存放,其它都可以.
分析memcache价值
补充: 关于如何使用多个memcached 缓存服务器.
<?php
$mem=new Memcache();
//如果我们网站,需要多个memached缓存系统.
//$mem->connect("localhost",11211); (立即向localhost的11211端口发出连接)
$mem->addServer("192.168.1.100",11211);//256 ->10m
$mem->addServer("192.168.1.200",11211);
$mem->addServer("192.168.1.222",11211);
//创建多个memcache服务使用.
$mem->add("name","zs",0,100);
?>
//使用socket来操作我们的memcached缓存系统.
代码:
<?php
require "memcached-client.php";
$mc = new memcached(array(
'servers' => array('127.0.0.1:11211'), //如果有多个memcached服务器使用可以使用,号间隔添加
'debug' => false,
'compress_threshold' => 10240,
'persistant' => true));
$mc->add('key', '顺平');
// $mc->replace('key', 'some random string');
$val = $mc->get('key');
echo "key=".$val;
?>
面试题: 请说明memcached 机制:
1. 是c/s结构,使用简单文本通讯
2. 基于libevent处理并发
3. 是内存缓存
4. 基于客户端的分布式
5.
6. .
php程序(1. memcache 扩展 2. memcached 扩展 (php_memcached.dll), 3. 使用socket访问) ---->memcachd 缓存系统
memcached 的细节
1. 生命周期, 是在add 数据的时候指定的.
2. 如何配置,将session数据,自动保存到memcached服务器中.
思路 : 在默认情况下 session 数据是放在文件中. c:/windows/temp
步骤:
① 在php.ini 文件中
;把session数据放入memcache
session.save_handler = memcache
;这里指定放到哪个memcached服务器
session.save_path = "tcp://127.0.0.1:11211"
使用
<?php
session_start();
$_SESSION['name']='xiaohong';
//现在我们希望把session数据放入到memcached缓存系统中.
echo session_id()."<br/>";
echo $_SESSION['name'];
?>
小结: 我们只需要在php.ini中作一个配置,然后再使用session时候,还是老规矩,只是这个时候,我们的session数据,已经放到memcached中
memcache的安全性
windows 下,设置防火墙.
原理图:
linux下
iptables -a input -p 协议 -s 可以访问ip -dport 端口 -j ACCEPT
小结如何使用memcached 的因素:
--我自己的一个小结如何决定是否使用memcached
--如果是一个小网站,pv值不大,就不考虑使用memcache了
--变化频繁,查询频繁,但是不一定写入数据库(适合memcached)(用户在线状态.)
--变化频繁, 一变化就要入库[比如股票,金融.](不适合memcached)
--变化不频繁,查询频繁,不管如不入库,都比较适合memcache。(新浪的新闻频道)