文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

浅解memcache

2024-04-02 19:55

关注


一.什么是memcache?

  memcache是一套分布式的高速缓存系统,对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著,是一套开放源代码软件。它通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。服务器端主程序memcached是以守护程序(监听)方式运行于一个或多个服务器中,随时会接收客户端的连接和操作,最大同时连接数为200。memcache既支持TCP协议,也支持UDP协议。


二.memcache的工作流程

        memcache先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现);每次更新数据库的同时更新memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。


三.memcached与redis

        redis是一个开源的日志型、Key-Value数据库,与memcache相比,有如下区别:

        1.memcached所有数据一直存储在内存中,而redis并不是;

        2.memcached只支持简单的key/value类型的数据,redis支持list、set、hash等数据结构的存储;

        3.redis支持数据的备份,即主从数据的复制;

        4.redis支持数据的持久化,可以讲内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。


四.memcached在php中的简单应用


系统环境:rhel6 x32 selinux and iptables disabled

主机角色:172.25.46.1 nginx php memcached

此实验中关于nginx和php的安装不再讲解,可参考我之前的文章《基于lnmp架构的Dsicuz论坛》


     #  tar zxf memcache-2.2.5.tgz

        cd memcache-2.2.5


     #   vi ~/.bash_profile

        PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin

     #   source ~/.bash_profil


   #    phpize

        Configuring for:

        PHP Api Version:        20100412

               Zend Module Api No:      20100525

               Zend Extension Api No:    220100525

          #   ./configure --enable-memcache

          #     make &&make install

                 Installing shared extensions:     /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20100525/

          #     cd   /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20100525/

          #     ll memcache.so

                -rwxr-xr-x 1 root root 259040 Jan 16 14:00memcache.so


        #     cd /usr/local/lnmp/php/etc

        #     vim  php.ini

                844 ;  extension=msql.so

                845    extension=memcache.so


        #        cd  /usr/local/lnmp/nginx/html

        #        vim  index.php

                 <?php

                 phpinfo()

                 ?>


         #     /etc/init.d/fpmrestart

       

此时可以使用浏览器测试php页面,我在实验中访问的是172.25.46.1/index.php,如图:

浅解memcache


      #  yum install -y memcached.x86_64

     #   /etc/init.d/memcached start


    #   telnetlocalhost 11211

          Trying ::1...

          Connected to localhost.

          Escape character is '^]'.

          stats                                       ##查看memcached状态

          STAT pid 4664

          STAT uptime 72

          STAT time 1452925893

          STAT version 1.4.4

           ......

          STAT curr_items 0

          STAT total_items 0

          STAT evictions 0

          END

          quit


     #    cd memcache-2.2.5

      #    cp memcache.php /usr/local/lnmp/nginx/html/

      #    cd /usr/local/lnmp/nginx/html/

      #    vim memcache.php      

            $VERSION='$Id: memcache.php,v 1.22008/09/11 19:21:06 mikl Exp $';

 

            define('ADMIN_USERNAME','memcache');    // Admin Username              

            define('ADMIN_PASSWORD','westos');      // Admin Password                     

            define('DATE_FORMAT','Y/m/d H:i:s');

            define('GRAPH_SIZE',200);

            define('MAX_ITEM_DUMP',50);

 

            $MEMCACHE_SERVERS[] = '172.25.46.1:11211';// add more as an array             #监听本机的11211端口

            #$MEMCACHE_SERVERS[] ='mymemcache-server2:11211'; // add more as an array


注意:在此实验中,编辑此文件时要将后两行注释掉一行。我在实验开始,都打开后,可以访问到监控页面,但是显示不了监控画面。


  # vim test.php

        <?php

       $memcache = new Memcache;

       $memcache->connect('127.0.0.1', 11211)or die ("Could not connect");

       $version = $memcache->getVersion();

       echo "Server's version:".$version."\n";

       $tmp_object = new stdClass;

       $tmp_object->str_attr = 'test';

       $tmp_object->int_attr = 123;

       $memcache->set('key', $tmp_object,false, 10) or die ("Failed to save data at the

       server");

       echo "Store data in the cache (datawill expire in 10 seconds)\n";

       $get_result = $memcache->get('key');

       echo "Data from the cache:\n";

       var_dump($get_result);

       ?>


  此时可以使用浏览器访问memcached监控页面,我在实验中访问的是172.25.46.1/memcache.php,用户及密码是文件memcache.php编辑的,如图:

 浅解memcache


进入监控页面,可以看到缓存使用为0,命中率为50%:

浅解memcache


访问test.php页面,对memcached进行测试,实验中我访问的是172.25.46.1/test.php,如图:

浅解memcache


刷新此页面,再观察memcached监控页面发生变化,缓存使用为119.0,命中率为85.7%,如图:

浅解memcache


这是一个简单的memcached在php中的应用,如您发现博文中存在问题或者您有更好地建议和意见可及时反馈给我哦~谢谢您的来访!

浅解memcache

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯