PHP-Memcache


layout: post
title: "PHP-Memcache"
date: 2016-05-14 20:08:26 +0800
comments: true
categories: [PHP]


什么是Memcache

Memcache通过缓存服务器信息的方式来加速服务器处理能力的系统。Memcache分配一块服务器上的内存来缓存一段特定时间之内的最近的查询数据。一旦某个数据被再次请求,那么Memcache就直接从内存中返回这个数据,而不是从数据库中,所以这将会加速查询速度。

Memcache使用场景

  • 非持久化存储:对数据存储要求不高
  • 分布式存储:不适合单机(对内存消耗很大)
  • ke/value存储:格式简单,不支持List,Array数据格式

Memcache服务端的安装

  • 编译安装 Libevent Memcache
  • 依赖管理工具 yum apt-get
  • Memcache 和Memcached
    • Memcached 是Memcache的升级版本 推荐使用
$sudo apt-get install memcached

安装完Memcache服务端以后,我们需要启动该服务:

memcached -d -m 128 -p 11211 -u root

使用

ps -ef |grep memcach
```查看是否启动
这里需要说明一下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 显示帮助
#Memcache客户端的安装
* 安装Libmemcached
* 为PHP安装memcached扩展

$sudo apt-get install php5-memcache

安装完以后我们需要在php.ini里进行简单的配置,打开/etc/php5/apache2/php.ini文件在末尾添加如下内容:
```php
[Memcache]

; 一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,
; 它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。



; 是否在遇到错误时透明地向其他服务器进行故障转移。
memcache.allow_failover = On

; 接受和发送数据时最多尝试多少个服务器,只在打开memcache.allow_failover时有效。memcache.max_failover_attempts = 20

; 数据将按照此值设定的块大小进行转移。此值越小所需的额外网络传输越多。
; 如果发现无法解释的速度降低,可以尝试将此值增加到32768。
memcache.chunk_size = 8192

; 连接到memcached服务器时使用的默认TCP端口。
memcache.default_port = 11211

; 控制将key映射到server的策略。默认值”standard”表示使用先前版本的老hash策略。
; 设为”consistent”可以允许在连接池中添加/删除服务器时不必重新计算key与server之间的映射关系。
;memcache.hash_strategy = “standard”; 控制将key映射到server的散列函数。默认值”crc32″使用CRC32算法,而”fnv”则表示使用FNV-1a算法。
; FNV-1a比CRC32速度稍低,但是散列效果更好。
;memcache.hash_function = “crc32″

保存php.ini,执行service apache2 restart重启Apache。使用php -m |grep memchched查看是否安装成功

Memcached 常见操作

<?php
$m = new Memcached();
$array=array(
  array('127.0.0.1',11211),

);
$m->addServers($array); //添加服务器 添加多条为addServers 一条为 addServer(“127.0.0.1”,11211);
// // echo "11";
// $info=$m->getStats();
// print_r($info);
//数据类操作
//add
$m->add("mkey","mvalue",600);//key value time
$m->add("mkey","mvalue2",600);//两次赋值不会改变它的值
$m->replace("mkey","mvalue3",600);//替换
echo $m->get("mkey");
$m->set("mkey","mvalue",600);//常用,如果不存在mkey则创建,如果存在则覆盖
$m->delete("mkey");//删除
$m->flush();//清空memcache中的所有缓存
$m->set("num",5,0);
$m->increment("num",5);//每次刷新num+5
$m->decrement("num",5);//每次刷新num-5
?>
<?php
  $m = new Memcached();
  $array=array(
    array("127.0.0.1",11211),
  );
  $m->addServers($array);
  $data=array(
    "key" => "value",
    "key2" =>"value2",

  );
  $m->setMulti($data,0); //一次设置多个值
 $result=  $m->getMulti(array("key","key2"));//一次获取多个值
 print_r($result);
 $m->deleteMulti(array("key","key2"));//一次删除多个值
 $m->getResultCode();//获取上次操作返回值
 $m->getResultMessage();//获取上次操作的信息
?>

官方说明文档

项目中使用Memcached

  • 即时生成缓存
    • 类似于新闻详情页,第一个人来了生成缓存,第二个人再来直接读缓存
  • 提前生成缓存
    • 适合高访问量
  • 永久缓存
    • 关于我们 这种基本不变的网页

注意事项

  • 不要在单机模式中使用Memcached
  • 不要在Memcached保存重要数据。掉电会丢失。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,894评论 2 89
  • 1、memcache的概念? Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨...
    桖辶殇阅读 2,221评论 2 12
  • 一、MemCache简介 session MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存...
    李伟铭MIng阅读 3,781评论 2 13
  • Memcached 教程 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。 Memcached...
    大熊_7d48阅读 2,469评论 0 0
  • 首先上一张图。慢慢的开始干画了。 这张临摹是我第一次画这么大的风景人物,所以一定体会不到精髓,但是画的时候,反倒是...
    1dfda00ff5da阅读 227评论 1 2