zoukankan      html  css  js  c++  java
  • Memcached

    简介

    Memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、API调用或页面引用结果的直接数据,如字符串、对象等。
    memcached是以LiveJournal旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。
    Memcached是一款开发工具,它既不是一个代码加速器,也不是数据库中间件。其设计哲学思想主要反映在如下方面:
    1. 简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成;
    2. 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期;
    3. 各服务器间彼此无视:不在服务器间进行数据同步;
    4. O(1)的执行效率
    5. 清理超期数据:默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数据;但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长;
    Memcached提供了为数不多的几个命令来完成与服务器端的交互,这些命令基于memcached的协议实现。
    存储类命令:set, add, replace, append, prepend
    获取数据类命令:get, delete, incr/decr
    统计类命令:stats, stats items, stats slabs, stats sizes
    清理命令: flush_all

    一、安装libevent

    memcached依赖于libevent API,因此要事先安装之,项目主页:http://libevent.org/,读者可自行选择需要的版本下载。本文采用的是目前最新版本的源码包libevent-2.0.21-stable.tar.gz。
    安装过程:
    # tar xf libevent-2.0.21-stable.tar.gz
    # cd libevent-2.0.21
    # ./configure --prefix=/usr/local/libevent
    # make && make install
    
    # echo "/usr/local/libevent/lib" > /etc/ld.so.conf.d/libevent.conf
    # ldconfig 
    

    二、安装配置memcached

    1、安装memcached
    # tar xf memcached-1.4.15.tar.gz 
    # cd memcached-1.4.15
    # ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
    # make && make install
    
    2、memcached SysV的startup脚本代码如下所示,将其建立为/etc/init.d/memcached文件:
    #!/bin/bash
    #
    # Init file for memcached
    #
    # chkconfig: - 86 14
    # description: Distributed memory caching daemon
    #
    # processname: memcached
    # config: /etc/sysconfig/memcached
    
    . /etc/rc.d/init.d/functions
    
    ## Default variables
    PORT="11211"
    USER="nobody"
    MAXCONN="1024"
    CACHESIZE="64"
    OPTIONS=""
    
    RETVAL=0
    prog="/usr/local/memcached/bin/memcached"
    desc="Distributed memory caching"
    lockfile="/var/lock/subsys/memcached"
    
    start() {
            echo -n $"Starting $desc (memcached): "
            daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE -o "$OPTIONS"
            RETVAL=$?
            [ $RETVAL -eq 0 ] && success && touch $lockfile || failure
            echo
            return $RETVAL
    }
    
    stop() {
            echo -n $"Shutting down $desc (memcached): "
            killproc $prog
            RETVAL=$?
            [ $RETVAL -eq 0 ] && success && rm -f $lockfile || failure
            echo
            return $RETVAL
    }
    
    restart() {
            stop
            start
    }
    
    reload() {
            echo -n $"Reloading $desc ($prog): "
            killproc $prog -HUP
            RETVAL=$?
            [ $RETVAL -eq 0 ] && success || failure
            echo
            return $RETVAL
    }
    
    case "$1" in
      start)
            start
            ;;
      stop)
            stop
            ;;
      restart)
            restart
            ;;
      condrestart)
            [ -e $lockfile ] && restart
            RETVAL=$?
            ;;       
      reload)
            reload
            ;;
      status)
            status $prog
            RETVAL=$?
            ;;
       *)
            echo $"Usage: $0 {start|stop|restart|condrestart|status}"
            RETVAL=1
    esac
    
    exit $RETVAL
    
    使用如下命令配置memcached成为系统服务:
    # chmod +x /etc/init.d/memcached
    # chkconfig --add memcached
    # service memcached start
    
    3、使用telnet命令测试memcached的使用
    Memcached提供一组基本命令用于基于命令行调用其服务或查看服务器状态等。
    # telnet 127.0.0.1 11211
    
    add命令:
    add keyname flag  timeout  datasize
    如:
    add mykey 0 10 12
    Hello world!
    
    get命令:
    get keyname
    如:get mykey
    VALUE mykey 0 12
    Hello world!
    END
    
    4、memcached的常用选项说明
    -l <ip_addr>:指定进程监听的地址;
    -d: 以服务模式运行;
    -u <username>:以指定的用户身份运行memcached进程;
    -m <num>:用于缓存数据的最大内存空间,单位为MB,默认为64MB;
    -c <num>:最大支持的并发连接数,默认为1024;
    -p <num>: 指定监听的TCP端口,默认为11211;
    -U <num>:指定监听的UDP端口,默认为11211,0表示关闭UDP端口;
    -t <threads>:用于处理入站请求的最大线程数,仅在memcached编译时开启了支持线程才有效;
    -f <num>:设定Slab Allocator定义预先分配内存空间大小固定的块时使用的增长因子;
    -M:当内存空间不够使用时返回错误信息,而不是按LRU算法利用空间;
    -n: 指定最小的slab chunk大小;单位是字节;
    -S: 启用sasl进行用户认证;
    

    三、安装Memcache的PHP扩展

    ①安装PHP的memcache扩展
    # tar xf memcache-2.2.5.tgz
    # cd memcache-2.2.5
    /usr/local/php/bin/phpize
    # ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache
    # make && make install
    
    上述安装完后会有类似以下的提示:
    Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
    
    ②编辑/usr/local/php/lib/php.ini,在“动态模块”相关的位置添加如下一行来载入memcache扩展:
    extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
    
    而后对memcached功能进行测试,在网站目录中建立测试页面test.php,添加如下内容:
    <?php
    $mem = new Memcache;
    $mem->connect("127.0.0.1", 11211)  or die("Could not connect");
    
    $version = $mem->getVersion();
    echo "Server's version: ".$version."<br/>
    ";
    
    $mem->set('hellokey', 'Hello World', 0, 600) or die("Failed to save data at the memcached server");
    echo "Store data in the cache (data will expire in 600 seconds)<br/>
    ";
    
    $get_result = $mem->get('hellokey');
    echo "$get_result is from memcached server.";         
    ?>
    
    如果有输出“Hello World is from memcached.”等信息,则表明memcache已经能够正常工作。

    四、使用libmemcached的客户端工具:

    访问memcached的传统方法是使用基于perl语言开发的Cache::memcached模块,这个模块在大多数perl代码中都能良好的工作,但也有着众所周知的性能方面的问题。libMemcached则是基于C语言开发的开源的C/C++代码访问memcached的库文件,同时,它还提供了数个可以远程使用的memcached管理工具,如memcat, memping,memstat,memslap等。
    1) 编译安装libmemcached
    # tar xf libmemcached-1.0.2.tar.gz 
    # cd libmemcached-1.0.2
    # ./configure 
    # make && make install
    # ldconfig
    
    2) 客户端工具
    # memcat --servers=127.0.0.1:11211 mykey
    # memping 
    # memslap
    # memstat
    

    五、Nginx整合memcached:

    server {
            listen       80;
            server_name  www.test.com;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                    set $memcached_key $uri;
                    memcached_pass     127.0.0.1:11211;
                    default_type       text/html;
                    error_page         404 @fallback;
            }
    
            location @fallback {
                    proxy_pass http://172.16.0.1;
            }
    }
  • 相关阅读:
    vue form dynamic validator All In one
    TypeScript api response interface All In One
    closable VS closeable All In One
    macOS 如何开启 WiFi 热点 All In One
    vue css inline style All In One
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)
    牛腩新闻 59 整合添加新闻页 FreeTextBox 富文本编辑器,检测到有潜在危险的 Request.Form 值,DropDownList 的使用
    牛腩新闻 61尾声: error.aspx的使用 防止报错
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (上)
    牛腩新闻 62:尾声续2 asp.net的编译和发布
  • 原文地址:https://www.cnblogs.com/wshenjin/p/6938243.html
Copyright © 2011-2022 走看看