memcache


一,Memcache概述===================


高性能分布式的内存对象缓存系统,通过在内存里维护一个巨大的hash表。


(key = value)


是一个软件(服务软件)c/s软件


维护内存的,是将数据在内存中使用,减少了I/O 150K


开源的,


端口:11211



二,原理======================


Memcache 软件 memcached


memcached是以守护程序方式运行于一个或多个服务器中,随时接收客户端的连接和操作。


客户端可以使用各种语言去编写,php,java,c,c++,perl,python,ruby等


基于libevent事件,即libevent库





三,为什么在web中使用Memcache============


不用查数据库,可以分布式存储




四,安装===================


linux下安装


先安装 libevent

再安装 memcache

./configure --with-libevent=/usr/local/libevent


启动 Memcache -d -m 128 -l 192.168.1.111 -p 11211 -u root


停止:kill memcached

或 kill cat /tmp/memcached.pid





windows 安装



放到目录下,然后

命令

memcache.exe -d install


服务 -》里面就有memcache


memcache.exe -d uninstall 缷载

memcache.exe -d -m 50 -l 127.0.0.1 -p 11211 start 自启动





五,操作===============


telnet 192.168.1.111 80 ........apache

telnet 192.168.1.111 22 ........ssh

telnet 192.168.1.111 11211 ........memcache


stats 查看状态


添加变量

add mykey1 1 3000 10

添加 变量 标志位 有效期 字符串长度

helloworld


获取变量

get myval1


使用get可以覆盖以前的变量

set myval1 1 3000 10

1234567890

get myval1


删除

delete myval1


清除所有的

flush_all



quit 退出


再进还能获得,重启服务后就没有了


version 版本


stats 状态


stats sizes 使用量


stats items


stats cachedump 1 1 查看一条标志位为1的数据


stats chchedump 1 0 查看所有标志位为1的数据






六,memcache在php 中使用=======================


下载memcache.dll扩展到php扩展目录中,然后在php配置文件中添加,重启,就有了对memcache的支持


php有一系列操作memcache的函数


有面向过程,还有面向对象


具体可以参考PHP手册 “LXXXIV. Memcache Functions” 这章。  Memcache面向对象的常用接口包括:

Memcache::connect -- 打开一个到Memcache的连接  Memcache::pconnect -- 打开一个到Memcache的长连接  Memcache::close -- 关闭一个Memcache的连接  Memcache::set -- 保存数据到Memcache服务器上  Memcache::get -- 提取一个保存在Memcache服务器上的数据  Memcache::replace -- 替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)

Memcache::delete -- 从Memcache服务器上删除一个保存的项目Memcache::flush -- 刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目)  

Memcache::getStats -- 获取当前Memcache服务器运行的状态 Memcache::addServer -- 分布式服务器添加一个服务器





demo:


<?php


$mem = new Memcache;

$mem->connect("loclahost",11211);

//$mem->addServer("www.lamp.com",11221);

//$mem->addServer("192.168.1.111",11211);

//添加字符串

$mem->add("mystr","this is a memcachetest",MEMCACHE_COMPRESSED,3600);


$mem->set("mystr","wwwwwwwwwwwww",MEMCACHE_COMPRESSED,3600);


$str = $mem->get("mystr");

echo "string:".$str;



$mem->delete("mystr"); //删除一个变量

$mem->flush(); //删除所有的


//添加数组

$mem->add("myarr",array("aaa","bbb","ccc"));

print_r($mem->get("myarr"));



//添加对象

class Person{


var $name="zhangshan";

var $age=10;


}


$mem=add("myobj",new Person);

var_dump($mem->get("myobj"));



//读出状态

echo $mem->getVersion();

print_r($mem->getStats());




$mem->close();


?>





七,php在什么地方使用memcache


1,数据库读出来的数据(select)

2, 在会话控制session中使用




同一个项目安装两次,key要有前缀

<?php


$mem = new Memcache;

$mem->connect("loclahost",11211);


$data = $mem->get("shops");



if(!$data){

$sql = "select * from shops";

$mysqli = new mysqli("localhost","root","","shopsdb");

$result = $mysqli->query($sql);

$data = array();

while($row=$result->Fetch_assoc()){

$data[]=$row;

}

$result->free();

$mysqli->close();


$mem->set("shops",$data,MEMCACHE_COMPERSSED,3360);


}



$mem->close();


?>






八,安全=================


1, 用内网的服务器做memcache服务器

2, 设置防火墙

命令:iptables