memcache 技术
memcache是一种缓存技术,主要把数据放在内存中管理访问,从而提高访问速度。一般查询从几个方面获取数据:数据库交互、硬盘中文件缓存、内存中数据缓存,从内存中访问最快!mamcache把数据以表(hahstable)的形式放在内存中,结构是 key(字符串) value(字符串,数值,数组,对象,布尔,二进制数据,null)
win平台安装
下载:http://code.jellycan.com/memcached/
安装:进入cmd,切换到 memcached.exe 文件所在目录
memcached.exe –d install
启动:memcached.exe –d start
下载对应php版本的php_memcache.dll 放到php扩展文件夹内并php.ini引入扩展extension=php_memcache.dll
然后phpinfo() 会看到memcache一项,即安装成功
memcache常用设置:
-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 显示帮助
mamcache操作(CURD):1、php程序操作(memcache扩展操作 mamcached扩展操作 直接源码socket编程操作) 2、telnet工具
telnet操作
登录 telnet 127.0.0.1 11211
语法
添加 add keyname 0(是否压缩) 存放时间(秒) 数据大小(字符)
add key001 0 60 10
helloworld
获取 get key001
修改 set keyname 0 存放时间 数据大小(以前key不存在则新建) replace keyname 0 存放时间 数据大小(要求key必须存在)
删除
delete keyname
flush_all 可以统一把数据清空
stats 状态显示 主要看命中率 内存中数据是否有用 get_hits/cmd_get
php操作
mamcache函数来自扩展
1 <?php 2 header("content-type:text/html;charset=utf-8"); 3 //创建一个memcache对象 4 $mem = new Memcache; 5 6 if (!$mem->connect('127.0.0.1', '11211')) { 7 die('连接失败'); 8 } 9 10 //增加(除了资源外所有数据类型) 11 if ($mem->add('key1', '中文汉字', MEMCACHE_COMPRESSED, 60)) { 12 echo '添加成功!'; 13 } 14 15 //修改 添加数据时候 秒数的话 只能30天之内 时间戳的话是到现在时间差 0 为永不过期 16 $arr = array('aaa', 'bbb', 'cc'); 17 if ($mem->set('key2', $arr, MEMCACHE_COMPRESSED, time()+63*24*3600)) { 18 echo '修改成功!'; 19 } 20 21 //查询 22 $val = $mem->get('key2'); 23 24 echo '<br/>val:' . print_r($val, 1); 25 26 //修改 27 if ($mem->replace('key2', 'hello', MEMCACHE_COMPRESSED, 60)) { 28 echo 'ok'; 29 } else { 30 echo 'fail'; 31 } 32 33 //清理所有数据 34 //$mem->flush(); 35 36 //获取状态 37 //var_dump($mem->getStats()); 38 ?>
memcache架构
c/s架构,通信基于文本行的协议;基于libevent的事件来进行并发处理,memcache的数据是放入到内存,并且在数据爆满的情况下,使用LRU 算法删除(安装最后访问时间删除);
基于客户端分布式的
$mem->new Memcache;
$mem->addServer('host', 'port');$mem->addServer('host2', 'port2');然后保存数据由memcache自己决定
总结:
- mem服务的数据不是同步, 数据是分布的
- 把什么数据放入到哪个memcached是由客户端的mem对象决定
- 当执行addServer的时候,并不是立即去连接mem服务,而是通过计算,hash后才去决定连接哪个mem服务,因此当你大量加入服务器到连接池,没有多余开销
mamcache生命周期:
从数据放入内存中时,直到时间到了自动销毁,时间为0不过期。销毁情况:1、时间到 2、重启服务 3、delete/flush
把session放入memcache
修改php.ini的配置文件
;[sesson.save_handler 有user|files|memcache]
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
可以用 ini_set 动态修改php.ini 只对本页面生效
mem服务无需账号密码即可登录,所以需要对外网禁止访问
什么样的数据适合放mem中
1、变化频繁的,不稳定的数据,不需要实时入库(在线人数,在线状态)
2、门户网站新闻
3、重要数据保密数据不放mem
本文来自博客园,作者:Caps,转载请注明原文链接:https://www.cnblogs.com/caps/archive/2013/02/28/2935923.html