博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Memcache学习笔记
阅读量:4946 次
发布时间:2019-06-11

本文共 5408 字,大约阅读时间需要 18 分钟。

目录索引:1.概念

              2.安装并使用memcached

              3.对memcached进行curd操作

              4.用memcache扩展操作Memcached

              5.memcached机制深入理解

              6.memcache的细节

1.概念

Memcached是一个高性能的分布式的内存对象缓存系统,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。相关网站: 

2.安装并使用memcached

(1).下载memcached软件

(2).运行cmd命令,切换到memcached.exe目录,运行memecache.exe -d install

(3).启动memcached

第一种方法:到【控制面板/服务】里启动

第二种方法:cmd到memcached目录,运行memcached.exe -d start

(4)用netstat -an查看11211端口是否在监听,如果在监听,说明启动成功。

(补充:1.用netstat -anb可以看11211端口是哪个程序在监听,同时可以看到那些用户连接到我们的服务器 2.有名的端口1-1024 apache:80 mysql:3306 ftp:21 ssh:22 oracle:1521 stmp:25)

3.使用telnet连接到memcached服务

telnet 127.0.0.1 11211

如果不能使用telnet命令,拷贝一个telnet.exe放到c:/windows/system32就OK。

(1) 增加

基本语法:add key名 0 (存放时间)数据大小

例:add key1 0 30 5

hello

(2)获取

基本语法:get key名

例:get key1

(3)修改

方式1:set key名 0 存放时间 数据大小

方式2:replace key名 0 存放时间 数据大小

例:set key100 0 70 6

ssssss

(4)删除

基本语法:delete key名

例:delete key300

(补充:1.查看状态stats 命中率cmd_set/cmd_get 2.清空内存数据flush_all 3.操作Memcached命令:)

4.用memcache扩展操作Memcached

(1)安装配置

①拷贝一个php_memcache.dll至php的ext目录

②在php.ini开启php_memcache.dll扩展

③重启apache

(2)操作

代码:

1     //连接memcache服务器 2     $mem = new Memcache(); 3     if(!$mem->connect('localhost',11211)) { 4         die('connect error!'); 5     } 6     //增加 7     if($mem->set('key1','val1',MEMCACHE_COMPRESSED,60)) { 8         echo 'add ok!'; 9     }10     $arr = array('moushu','yunshu');11     if($mem->set('arr',$arr,MEMCACHE_COMPRESSED,60)) {12         echo 'add ok!';13     }14     class Dog {15         public $name;16         public $age;17     }18     $dog = new Dog();19     if($mem->set('dog',$dog,MEMCACHE_COMPRESSED,60)) {20         echo 'add ok!';21     }22     $null_val = null;23     if($mem->set('null_val',$null_val,MEMCACHE_COMPRESSED,60)) {24         echo 'add ok!';25     }26     $bool_val = null;27     if($mem->set('bool_val',false,MEMCACHE_COMPRESSED,60)) {28         echo 'add ok!';29     }30     $handle = fopen('2.php','a');31     if($mem->set('res',$handle,MEMCACHE_COMPRESSED,60)) {32         echo 'add res ok!';33     }34     if($mem->set('name','luoyunshu',MEMCACHE_COMPRESSED,30*3600*24)) {35         echo 'add name ok!';36     }  //存储30天37     if($mem->set('name2','moushu',MEMCACHE_COMPRESSED,time()+31*3600*24)) {38         echo 'add name2 ok!';39     }   //存储31天40    41     //修改42     if($mem->replace('key1','hello',MEMCACHE_COMPRESSED,60)) {43         echo 'add ok!';44     }45     46     //删除47     if($mem->delete('key1')) {48         echo 'del ok!';49     }50     51     //查询52     $val = $mem->get('key1');53     echo $val;54     $val = $mem->get('arr');55     var_dump($val);56     $dog = $mem->get('dog');   //取对象时要先声明类定义57     var_dump($dog);58     $null_val = $mem->get('null_val');   59     var_dump($null_val);  //null60     $bool_val = $mem->get('bool_val');  61     var_dump($bool_val);  //''62     $res = $mem->get('res');63     var_dump($res);   //064     $res = $mem->get('key1');65     var_dump($res);   66     $name = $mem->get('name');67     var_dump($name); 68     $name2 = $mem->get('name2');69     var_dump($name2);   //moushu

 5.memcached机制深入理解

(1)基于c/s架构 ,协议简单

 ● c/s架构,此时memcached为服务器端,我们可以使用如PHP,c/c++等程序连接memcached服务器。

 ● memcached的服务器客户端通信并不使用XML等格式,而使用简单的基于文本行的协议。因此,通过telnet也能在memcached上保存数据、取得数据

 (2)基于libevent的事件处理

 ● libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统: Windows/Linux/BSD/Solaris 等操作系统的的事件处理。

 ● Memcached 使用libevent来进行网络并发连接的处理,能够保持在很大并发情况下,仍旧能够保持快速的响应能力。

 (3)内置内存存储方式

 ● 为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。

 (4)基于客户端的分布式

 ● memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。

代码:

1     //连接memcache服务器,启动两个服务器 (memcached.exe -p 9999 2     $mem = new Memcache(); 3     if(!$mem->addServer('localhost',11211)) { 4         die('connect server1 error!'); 5     } //serv1 6     if(!$mem->addServer('localhost',9999)) { 7         die('connect server2 error!'); 8     } //serv2 9     10     //将数据放入哪个memcache服务器,由客户端的mem对象决定11     //当执行addServer的时候,并不是立即去连接mem服务,而是通过计算,hash后采取决定连接哪个mem服务,因此当你大量加入服务器到连接池时并没有多余的开销。12     if($mem->set('key1','val1',MEMCACHE_COMPRESSED,120)) {13         echo 'add key1 ok!';14     } //放在serv115     if($mem->set('key2','val2',MEMCACHE_COMPRESSED,120)) {16         echo 'add key2 ok!';17     } //放在serv218     if($mem->set('key3','val3',MEMCACHE_COMPRESSED,120)) {19         echo 'add key3 ok!';20     } //放在serv121     22     $res1 = $mem->get('key1');23     $res2 = $mem->get('key2');24     $res3 = $mem->get('key3');25     echo $res1;26     echo $res2;27     echo $res3;

 6.memcache的细节

(1)生命周期

 从数据放入memcache开始计时,直到时间到了,就销毁,如果时间为0,则表示不过期。memcache的数据被销毁情况有:1.时间到了 ②重启memcached服务 ③delete掉了

 (2)将session数据放入memcached

    ①.配置:

    第一种方法:修改php.ini文件,修改如下:

      save-handler=memcache

     session.save_path = "tcp://localhost:11211"

    第二种方法,使用ini_set()

    ini_set('session.save_handler','memcache');

    ini_set('session.save_path','tcp://localhost:11211');

    一些说明:memcached主要的目的是提速,数据不和用户绑定(session数据存入memcache中以session id作为键值,任何可访问memcache的人都可以取到值)。session数据和用户绑定,更安全。

 (3)memcached安全性

   通过启用防火墙来防止外网访问memcached服务,保证memcached的安全。linux系统设置防火墙的命令:iptables -a input -p tcp -s 127.0.0.1 -dport 11211 -j ACCEPT

 (4)样的数据适合放入memcache中?

   变化频繁,具有不稳定的数据,不需要实时入库(比如用户在线状态、在线人数....),想加快用户访问应用的速度。大数据,如图片、视频不适合放入memcache中。

  到这,时间再完善.....

 

转载于:https://www.cnblogs.com/luoyunshu/p/3463397.html

你可能感兴趣的文章