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函数来自扩展

View Code
 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自己决定

总结:

  1. mem服务的数据不是同步, 数据是分布的
  2. 把什么数据放入到哪个memcached是由客户端的mem对象决定
  3. 当执行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

posted @ 2013-02-28 21:27  Caps  阅读(306)  评论(0编辑  收藏  举报