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