前面已经安装好了memcache,接下来开始使用memcache
整理自兄弟连视频教程
Memcache基本知识
memcache概念
memcache(内存,缓存): 高性能的分布式对象缓存系统,通过在内存里维护一个巨大的hash表
--------------------------
|key |value
|mystr |"abc"
|myarr |Array('aa','cc')
|object |Object值
--------------------------
利用memcache缓存来减小数据库的负载
就是一个软件(服务软件)c/s软件,类似
mysql 一个ip 一个端口
Apache www.baidu.con 80
维护内存,将数据在内存中使用,减小I/O,很小的一个软件150k,同时是一个开源
监听129.121.11.111 端口11211
memcache工作原理
memcache 软件 memcached 进程
类似 http httpd
vsftp vsftpd
c/s软件
memcached是以守护程序运行于一个或多个服务器中,随时会接收客户端的连接和操作。
客户端可以使用各种语言编写,例如php/java/c/python
memcache使用c语言编写,使用了libevent,所以需要安装libevent库
为什么在WEB中使用memcache
对于大型的网站,需要使用memcache提高访问速度
安装memcache服务器(Linux和windows)
memcache基于libevent事件,需要先安装这个库
Linux:直接源文件安装,
安装libevent ./configure -with-libevent=/usr
make && make install
安装memcache ./configure -with-libevent=/usr
make && make install
启动 memcached -d -m 128 -1 192.168.1.11 -p 11211 -u root
停止 kill memcache进程
Windows
memcached.exe -d install[uninstall]
监听本地地址,端口11211
memcached.exe -d -m 50 -l 127.0.0.1 -p 11211 start
使用内存大小,默认64M
memcache的启动管理
memcached -d start
基本设置(memcache -h 帮助)
操作memcache
命令行方式 Telnet作为客户端
telnet 192.168.1.128 80 --Apache
telnet 192.168.1.129 21 --ftpd
telnet localhost 11211 --memcached
这个需要开始telnet服务
基本命令
以下运行均在命令行的模式下
运行telnet localhost 11211进入Memcache界面
version 输出Memcache版本
add命令
格式:命令 变量名 一个16位的无符号数 有效期(秒) 长度
add myvar1 1 3000 10
helloword
STORED
add 仅能添加不存在的键,存在则存储失败
add myval1 1 300 10
heldsgdhjk
NOT_STORED
get myval1
VALUE myval1 1 10
helloworld
END
get
格式:命令 变量名
get myval1
VALUE myval1 1 10
helloworlf
END
set
类似add命令
set myval1 1 3000 10
hekekrkdsa
STORED
get myval1
VALUE myval1 1 10
hekekrkdsa
END
delete
格式: delete 变量名
delete myval1
DELETED
get myval1
END
stats
stats sizes
STAT 96 1
STAT 128 1
STAT 12640 1
STAT 12672 1
END
//查看Memcache中的items
stats items
STAT items:1:number 7
STAT items:1:age 932
STAT items:1:evicted 0
STAT items:1:outofmemory 0
END
stats cachedump 1 1
ITEM mn [4 b; 1463836268 s]
END
//查看全部
stats cachedump 1 0
ITEM mn [4 b; 1463836268 s]
ITEM myval3 [10 b; 1463836120 s]
ITEM myval2 [10 b; 1463837080 s]
ITEM myvql1 [10 b; 1463835968 s]
ITEM myvql1 [10 b; 1463835923 s]
ITEM myvql [10 b; 1463835870 s]
ITEM mysql [10 b; 1463837371 s]
测试php是否支持memcache库
<?php
phpinfo();
?>
查看发现不支持memcache库,找到php家目录,在ext中添加php_memcache.dll,修改php.ini
PHP使用memcache的情况
1、数据库读出来的数据(select)使用memcache处理
2、在会话控制中使用,将用户的信息存放在memcache中
memcache安全性
1、内网访问,不暴漏在外网上
2、设置防火墙
php手册之memcache
Memcache — The Memcache class
Memcache::add — Add an item to the server
Memcache::addServer — Add a memcached server to connection pool
Memcache::close — Close memcached server connection
Memcache::connect — Open memcached server connection
Memcache::decrement — Decrement item’s value
Memcache::delete — Delete item from the server
Memcache::flush — Flush all existing items at the server
Memcache::get — Retrieve item from the server
Memcache::getExtendedStats — Get statistics from all servers in pool
Memcache::getServerStatus — Returns server status
Memcache::getStats — Get statistics of the server
Memcache::getVersion — Return version of the server
Memcache::increment — Increment item’s value
Memcache::pconnect — Open memcached server persistent connection
Memcache::replace — Replace value of the existing item
Memcache::set — Store data at the server
Memcache::setCompressThreshold — Enable automatic compression of large values
Memcache::setServerParams — Changes server parameters and status at runtime
连接
define('IP','localhost');
define('PORT',11211);
$mem = new Memcache();
//连接memcache
$mem->connect(IP,PORT);
//$mem->pconnect(IP,PORT) //持久连接
插入
Memcache::add(string key,mixed val[,flag[,expire]])
//键-value-是否压缩方式-保存时间(默认30天)
//如果memcache中不存在key,则存储,存在则不操作且返回false
//成功返回true,失败返回false(有可能是存在了key)
//$mem->add('tm1','this is the first string',MEMCACHE_COMPRESSED,3600)
//可以存储任意的数值,对象
$mem->add('tm1','this is the first string');
查询
$mem->get('tm1');
修改
//重置key的值,如果存在则替换,不存在则相当于add
$mem->set('tm1','settm1');
//存在与否的情况类似set方法
$mem->replace('tm2','replace2');
删除
$mem->delete('key');
清空
$mem->flush();
查询memcache状态
$mem->getVersion();
查询memcache版本
$mem->getStats();
实例
<?php
define('IP','localhost');
define('PORT','11211');
//连接memcache
$mem = new Memcache;
$mem->connect(IP,PORT);
/*
* 一个项目有可能安装两次,所以对于key的设置
* 最好加一个前缀
*/
$sql = 'select * from hd_user';
//$key = 'a'.'user';
$key = md5($sql); //以sql语句作为key
$time = microtime();
//$mem->flush();
$cache = $mem->get($key);
if(!$cache){
$mysqli = new mysqli('localhost','root','12345678','think1');
//$sql = 'select * from hd_user';
$result = $mysqli->query($sql);
$rows = array();
while($row = $result->fetch_assoc()){
$rows[] = $row;
}
$mem->set($key,$rows,MEMCACHE_COMPRESSED,10);
$result->free();
$mysqli->close();
}
$row = $cache;
echo "======<br>".(microtime() - $time). "<br>=======";
echo "<pre>";
print_r($rows);
?>
测试数据库和memcache的运行结果