memcache

作者:烨竹

Memcache简介

Memcache是一个基于内存的键值对的缓存系统,具备读写速度比较高的特性,同时支持分布式存储

数据存储内存:Memcache将数据直接存储在内存中。因此内存中数据容易丢失(服务器重启会丢失数据)

键值对:例如PHP中数组 通过名称就可以找到对应的数据

缓存系统:临时存储数据的介质。最终在数据库中一定会存在对应的数据作为一个备份

分布式存储:每一个只存储一部分数据。对于memcache严格上自己本身是不支持分布式存储,是借助于第三方的扩展实现分布式存储

memcache安装

①创建memcache根目录
②拷贝memcache的安装包文件
③使用<u>超级管理员</u>打开cmd进入memcache目录


④以非服务器的方式安装memcache

此时为非服务的方式安装启动memcache目前cmd处于挂起状态不能正常操作
⑤以服务方式安装memcache

安装之后在自己计算机的服务中查看结果

⑥启动memcache服务
找到memcache的服务点击启动

或者使用cmd命令实现

memcache的相关参数

-p:指定memcache TCP协议的通信端口 默认为11211端口
-d :start/stop 用于启动或者关闭吗memcache
-d: install/uninstall:将memcache安装服务或者卸载服务
-u:指定用户 在Linux下使用
-m:指定memcache最大使用的内存 默认为64M
-c:指定memcache最大的并发数 默认为1024
memcache.exe -help

memcache常用的操作指令

memcache支持TCP协议的通信数据操作可以使用Telnet工具,所以这一些指令在Telnet工具中完成;Telnet工具用法:https://www.jianshu.com/p/6c80a53c0b66

1、set指令
作用:设置数据
语法:set 键名 0|1(是否压缩) 0(有效时间0代表不过期) 3(内容的长度)(注意写完长度需要回车)

键名:一个名称标识,此标识有要求最多250个字符。对于使用键名建议简短并且能表示含义 例如user_info_id_2

是否压缩:
0不压缩:直接将内容原生存储,此方式内存是的使用空间比较大(空间换时间)
1压缩:将内容按照规则压缩为更小然后存储,使用压缩可以节省内存空间但是相对于不压缩在操作上会略慢(时间换空间)

有效时间:0代表不过期一般永远有效。可以设置为一个具体秒数表示多少秒之后过期。在实际项目中一般对于此值都会设置一个过期的时间

内容长度:一定要按照具体的内容的字符数编写长度

值:写入到内存中的数据 最大只能为1M

①案例一


②案例二

Set一个不存在的key会创建该key 设置一个已经存在的会修改对应的值,即set的作用(添加与修改)
③案例三

此时表示age这个可用有效时间只有30秒,一旦30秒一到就不能读取数据(失效)

2、get指令
作用:读取数据
语法:get 键名称

3、add指令
作用:给key设置数据,只能针对一个不存在的key进行设置(add只能添加不能修改)
语法:语法同set


4、delete指令
作用:删除key
语法:delete 键名


5、incr指令
作用:设置自增长
语法 incr 键名 增加的数字


6、decr指令
作用:自减
语法:同incr

7、flush_all指令
作用:清空memcache中所有数据
语法:flush_all



此命令只能在测试中使用。

8、stats指令
作用:查看memcache状态



Memcache命中率=get_hits/cmd_get*100%
一般命中率在70-90之间勉强可以接受。

PHP操作memcache

注意:PHP对于memcache扩展有两套。另外一套为memcached扩展

1、php开启memcache扩展

①下载Windows下的PHP扩展(php7)
下载地址:https://github.com/keyesone66/php7_memcache.dell.git声明这是偷的别人的版本库里面的内容,不会做更新,本人只做收藏;来源:https://github.com/nono303/PHP7-memcache-dll
具体下载时需要注意 使用的编译器(VC14)、是否线程安装(ts/nts)、PHP的版本。所有信息都可以通过PHPinfo查看

②php.ini查看扩展目录


③将扩展文件拷贝到扩展目录下

④php.ini修改PHP的配置文件使用扩展

⑤重启再次查看phpinfo

⑥测试

memcache支持的数据类型

memcache对于PHP中的数据类型除了资源之外其他的都可以支持使用(由于资源变量经过序列化与反序列化之后结果变化),从本质上memcache支持的数据类型只有一种--字符串的数据类型;
下面具体详解:

基本数据类型:布尔,整型,字符串,浮点;支持所有;


复合数据类型:数组,对象;支持所有


特殊数据类型:NULL,资源;简单理解

使用telnet客户端查看数据




从上述结果可知,memcache中所存储的数组格式及对象格式的数据在memcache中都是经过序列化之后的字符串。从严格上说memcache只支持字符串格式的数据;对于PHP中的特殊数据类型只有空可以支持;

memcache管理工具

下载:$ git clone https://github.com/junstor/memadmin.git


memcache使用

三种使用场景:作为缓存系统,Session共享,作为分布式存储数据

作为缓存使用

1、读取数据时先读取缓存系统中的内容,有则直接使用否则在读取数据库获取原始数据然后在写入到缓存系统中
2、当数据发生变化修改原始数据之后需要将缓存中的内容进行更新

案例一:用户信息缓存
考虑当用户登录完成之后会经常使用用户的一起信息因此可以在用户登录完成之后将信息缓存到memcache中
①当用户登录完成设置数据


②使用缓存
后期可以在任何想要使用用户信息的地方直接读取memcache中的内容。例如member控制器中使用用户信息

案例二:商品关注功能实现
①添加关注

②查看关注的商品

分布式存储
1.memcache中分布式存储
每台memcache服务器中只保存一部分数据

2、Linux搭建memcache服务
https://www.jianshu.com/p/7f185ad792b4

实现memcache分布式存储
①关闭Linux下的防火墙
systemctl restart iptables.service
②创建代码实现分布式存储

<?php
$obj =new Memcache();
$obj -> addServer('127.0.0.1',11211);
$obj -> addServer('192.168.139.128',11211);
$obj->set('age1',1);
$obj->set('age2',2);
$obj->set('age3',3);
$obj->set('age4',4);
$obj->set('age5',5);
$obj->set('age6',6);
/*$obj -> connect('127.0.0.1',11211);
$res =$obj->set('keyname','keyvalue',0,0);
var_dump($res);*/
?>

③查看数据结果



192.168.116.135中的数据



关于memcache的分布式的存储是由PHP的扩展实现,会根据服务器已经具体的key的名称准确的定位具体数据存储的位置
Memcache分布式:可以扩充单memcache服务器存储上线并且也可以解决并发问题

memcache存储session

1.1、session的存储方式
1、session默认存储在文件
2、Session存储到数据库
3、使用memcache存储session信息
1.2、文件存储方式(默认方式)
优点:任何操作系统都可以支持此方式
缺点:速度相对比较慢。负载均衡项目下不能使用
1.3、数据库的存储方式
优点:速度相对文件提升并且解决了负载的问题
缺点:增加数据库的压力
1.4、memcache存储session
优点:提升速度并且解决负载问题 并且也减少了mysql的压力
1.5、实现memcache存储session
前置条件:需要有能够正常工作的memcache服务器
1.5.1、方式一修改配置文件
①修改PHP的配置文件


②重启apache
③编写代码测试

访问测试

查看memcache中的内容

1.5.2、方式二代码中实现
对于方式一由于是直接修改配置文件回导致服务器下所有的项目的session都会写入到memcache中。
①还原session的存储为默认的文件方式
!](https://upload-images.jianshu.io/upload_images/11994491-ac9caa2aca463781.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
②重启apache
③创建代码测试

查看结果

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

推荐阅读更多精彩内容

  • 1、memcache的概念? Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨...
    桖辶殇阅读 2,220评论 2 12
  • 一、MemCache简介 session MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存...
    李伟铭MIng阅读 3,781评论 2 13
  • (一):基础概念 memcache是什么? Memcache 是一个高性能的分布式内存对象缓存系统,用于动态Web...
    楚江云阅读 1,194评论 0 5
  • http://mp.weixin.qq.com/s/_-ywTouLXaeU4XBxIUZKkg
    无用课堂阅读 160评论 0 0
  • 我们的人生中总是有那么一段时光,迷茫又痛苦。心里有着无数的想法却无法实现,人生有着伟大的目标却无从下手。 你会不会...
    夕言细语阅读 16,192评论 100 604