memcache
memcached 的基本概念
memcached是一个高性能的分布式的内存对象系统,支持把各种php的数据(array,对象);
安装步骤:
1、下载memcached软件
2、将memcached软件拷贝到某个目录,最好放在php开发环境目录下,便于管理。
3、开始运行cmd,切换到目录,memcached -d install 安装 memcached -d uninstall 卸载 安装成功没有任何提示。
4、启动服务
(1)直接通过界面启动该服务
(2)在控制台启动:memcached -d start
5、查看memcached服务是否启动成功!默认端口号11211
(1)查看命令:netstat -an
(2)或者:netstat -anb
如果是正在监听,表示启动成功。
memcached 常用命令:
memcached的基本命令(安装、卸载、启动、配置相关):
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
memcached的基本命令(当memcached 启动后 用于对memcached管理的数据和本身运行状态相关的命令):
Command Description Example
get Reads a value get mykey
set Set a key unconditionally set mykey 0 60 5
add Add a new key add newkey 0 60 5
replace Overwrite existing key replace key 0 60 5
append Append data to existing key append key 0 60 15
prepend Prepend data to existing key prepend key 0 60 15
incr Increments numerical key value by given number incr mykey 2
(存放的应当是数字,才能增加或减少)
decr Decrements numerical key value by given number decr mykey 5
(存放的应当是数字,才能增加或减少)
delete Deletes an existing key delete mykey
flush_all Invalidate specific items immediately flush_all 全部清空
Invalidate all items in n seconds flush_all 900 还有900秒的全部清空
stats Prints general statistics stats
Prints memory statistics stats slabs
Prints memory statistics stats malloc
Print higher level allocation statistics stats items
stats detail
stats sizes
Resets statistics stats reset
version Prints server version. version
verbosity Increases log level verbosity
quit Terminate telnet session quit
对查看的信息的关键字中英文对照表
命令:stats
pid memcache 服务器的进程ID
uptime 服务器已经运行的秒数
time 服务器当前的unix时间戳
version memcache版本
pointer_size 当前操作系统的指针大小(32位系统一般是32bit)
rusage_user 进程的累计用户时间
rusage_system 进程的累计系统时间
curr_items 服务器当前存储的items数量
total_items 从服务器启动以后存储的items总数量
bytes 当前服务器存储items占用的字节数
curr_connections 当前打开着的连接数
total_connections 从服务器启动以后曾经打开过的连接数
connection_structures 服务器分配的连接构造数
cmd_get get命令(获取) 总请求次数
cmd_set set命令(保存) 总请求次数
get_hits 总命中次数
get_misses 总未命中次数
evictions 为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)
bytes_read 总读取字节数(请求字节数)
bytes_written 总发送字节数(结果字节数)
limit_maxbytes 分配给memcache的内存大小(字节)
threads 当前线程数
特别说明;如果你的网站,需要的memcached的内存大于64m,应当这样启动
memcached –m 256m –d start LRU
如果你希望换一个端口
memcached -d -m 30 -l 127.0.0.1 -p 9000 -d start(linux下管用)
面试题:请你列出5个常见的端口
80 apache/iis
21 ftp
23 telnet
3304 mysql
1521 oracle
1433 sql server
8080 tomcat
使用方法:
1、tenet->memcached(黑窗口操作,教学使用)
2、php程序(1.memcache扩展、2.memcached扩展、3.使用socket网络访问)->memcached
tenet使用(curd操作)方法:
1、链接到memcached:telnet 127.0.0.1 11211
add name 0 60 5
添加 名字 标志位 存放时间 数据多大字节
添加:key/value 如果有一个Key已存在,在放入的时候不可以放
get name //获取name值
set name 0 60 5
更新:如果name存在相当于更新,如果name不存在就是添加。
delete key值
其他的看手册
php操作memcached
使用memcache扩展(是一堆C函数)来操作 memcached缓存系统
扩展下载:在你的localhost下建立一个phpinfo.php
内容:
<?php
echo phpinfo();
?>
你会看
根据信息,去下载响应的dll文件。网址:http://windows.php.net/downloads/pecl/releases/memcache/3.0.8/
对应选择你的位数和版本否则扩展无效。
1、把 php_memcache.dll 放到在 php/ext 中
2、php.ini 中配置 extension
;这里启用memcache.dll扩展
extension=php_memcache.dll
重启apache。访问http://localhost/phpinfo.php
你会看到phpinfo中会提示:
则开启成功,没有则失败!
3、编程测试(crud操作)
放入数据:
<?php
//1.实例化一个memcahe对象
$mem = new Memcache;
//2.链接到指定的memcache中
$mem->connect('127.0.0.1',11211);
//0表示不压缩,压缩用:MEMCACHE_COMPRESSED
//60秒数,如果此值设置为0表明此数据永不过期,不能超过 2592000秒(30天)
if(!$mem->add('name','zhang3',0,60)){
echo '失败';
}else{
echo '成功';
}
?>
取数据:
<?php
//1.实例化一个memcahe对象
$mem = new Memcache;
//2.链接到指定的memcache中
$mem->connect('127.0.0.1',11211);
//0表示不压缩,压缩用:MEMCACHE_COMPRESSED
//60秒数,如果此值设置为0表明此数据永不过期,不能超过 2592000秒(30天)
if($res = $mem->get('name')){
echo '拿到'.$res;
}else{
echo '没拿到';
}
?>
memcache可以放什么类型的数据
PHP数据类型有八种: string, int, float, boolean, array, object, null, rsource(不可放进去)
补充: 关于如何使用多个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', 'hello123');
// $mc->replace('key', 'some random string');
$val = $mc->get('key');
echo "key=".$val;
?>
面试题: 请说明memcached 机制?
1. 是c/s结构,使用简单文本通讯(memcached的服务器客户端通信并不使用XML等格式,而使用简单的基于文本行的协议。因此,通过telnet也能在memcached上保存数据、取得数据)
2. 基于libevent处理并发(libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统:Windows/Linux/BSD/Solaris 等操作系统的的事件处理。Memcached 使用libevent来进行网络并发连接的处理,能够保持在很大并发情况下,仍旧能够保持快速的响应能力。)
3. 内置内存存储方式
4. 基于客户端的分布式