首页 > 代码库 > 83-高性能,分布式缓存memcache简析

83-高性能,分布式缓存memcache简析

一. memcached简介

     memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in      speeding up dynamic web applications by alleviating database load.

     (由 LiveJournal旗下的Danga Interactive研发)

        #高性能,分布式缓存系统

    

     缓存服务器:

         缓存:cache,无持久存储功能;

         bypass缓存 # 旁挂式缓存

         k/v cache,仅支持存储流式化数据;

        

     特性:

         k/v cache:仅可序列化数据;存储项:k/v (key:value)

         智能性一半依赖于客户端(调用memcached的API开发程序),一半依赖于服务端;

         分布式缓存:互不通信的分布式集群;

         分布式系统请求路由方法:取模法(对机器数量取模来决定发往哪台机器),

                        一致性哈希算法(顺时针哈希环);

         算法复杂度:O(1)

         清理过期缓存项:

             缓存耗尽:LRU

             缓存项过期:惰性清理机制

                #即会定期检查缓存,当缓存失效时候并不做清理,而是有新缓存写入时

                候,直接覆盖原有的旧缓存内容

二. 安装配置:

             由CentOS 7 base仓库直接提供:

             监听的端口:

                 11211/tcp, 11211/udp

        

             主程序:/usr/bin/memcached

             配置文件:/etc/sysconfig/memcached

            技术分享

             Unit File:memcached.service

             管理工具:memcached-tool

             协议格式:memcached协议

                 文本格式

                 二进制格式


三.memcache 命令详解

        详细协议帮助 :  /usr/share/doc/memcached-1.4.15/protocol.txt

         命令:

             统计类:stats, stats items, stats slabs, stats sizes

             存储类:set, add, replace, append, prepend

             命令格式:<command name> <key> <flags> <exptime> <bytes>

                            额外信息  过期时间  大小

                   <cas unique>        #回车后才能输入值

    

                key    key 用于查找缓存值

                flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息

                   # 默认用1 即可

                expiration time 在缓存中保存键值对的时间长度(以秒为单位,0 表示永

                远)

                bytes 在缓存中存储的字节点

                value 存储的值(始终位于第二行)

    

             检索类:get, delete, incr/decr

             清空:flush_all

        

         示例:

             telnet> add KEY <flags> <expiretime> <bytes> \r

             telnet> VALUE参数 用法

        

                 技术分享

         memcached程序的常用选项:

             -m <num>:Use <num> MB memory max to use for object storage; the

                default is 64 megabytes.

             -c <num>:Use <num> max simultaneous connections; the default is 1024.

             -u <username>:以指定的用户身份来运行进程;

             -l <ip_addr>:监听的IP地址,默认为本机所有地址;

             -p <num>:监听的TCP端口, the default is port 11211.

             -U <num>:Listen on UDP port <num>, the default is port 11211, 0 is off.

            技术分享

             -M:内存耗尽时,不执行LRU清理缓存,而是拒绝存入新的缓存项,直到有多余的空

                间可用时为止;

             -f <factor>:增长因子(内存分块的大小增长倍数);默认是1.25;

             -t <threads>:启动的用于响应用户请求的线程数;

            

             memcached默认没有认证机制,可借用于SASL进行认证;

             SASL:Simple Authentication Secure Layer

    

 三.   API:

     php-pecl-memcache

     php-pecl-memcached

     python-memcached

     libmemcached

    #此工具包中包含多个memcache的命令行管理工具

     libmemcached-devel

    

     命令行工具:

     memcached-tool  SERVER:PORT  COMMAND

        -------------------------------------------------

        [root@localhost ~]# rpm -ql libmemcached

        /usr/bin/memaslap

        /usr/bin/memcapable

        /usr/bin/memcat

        /usr/bin/memcp

        /usr/bin/memdump

        /usr/bin/memerror

        /usr/bin/memexist

        /usr/bin/memflush

        /usr/bin/memparse

        /usr/bin/memping

        /usr/bin/memrm

        /usr/bin/memslap

        /usr/bin/memstat

        /usr/bin/memtouch

        --------------------------------------------------

    


四. 利用 telnet 管理memcache 示例

        1. yum install telnet

        --> telnet localhost 11211

        stats:

        

          

              技术分享


五. nginx 对memcache 的支持

        所需模块:  ngx_http_memcached_module

            Syntax: memcached_bind address [transparent] | off;

            Default: —

            Context: http, server, location

                #用于绑定 memcache 服务器

        

            Syntax: memcached_pass address;

            Default: —

            Context: location, if in location

                #绑定memcache 集群

            eg:

            server {    

            location / {        

                set $memcached_key "$uri?$args";

                    #将指定的key 放入memcache 生成缓存;

                    memcached_pass host:11211;

                    error_page     404 502 504 = @fallback;

                    }    

        

                location @fallback {        

                    proxy_pass  http://backend;    

                    }

             }

             ============================================================







    

83-高性能,分布式缓存memcache简析