• memcached缓存系统


    1.1 什么是memcached:

    1. memcached之前是danga的一个项目,最早是为LiveJournal服务的,当初设计师为了加速LiveJournal访问速度而开发的,后来被很多大型项目采用。官网是www.danga.com或者是mencached.org。
    2. Wencachea是一个幅性能的分布式的内存对象缓存系统,全世界有不少公司采用这个缓存项目来构建大负载的网站,来分担数据库的压力。memcached是通过在内存里维护一个统一的巨大的hash表,memcached能存储各种各样的数据,包括图像、视                                                                                                                                                                                                                         频、文件、以及数据库检素的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
    3. 哪些情况下适合使用memcached:存储验证码(图形验证码、短信验证码)、登景session等所有不是至关重要的数据。
    4. Memcached是一种完全基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。

    1.2 产生背景

    许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。

    但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。  这时就该memcached大显身手了。

    memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

    1.3工作原理

    1. memcached是一套C/S模式架构的软件,在服务器端启动服务守护进程,可以为memcached服务器指定监听的IP地址、端口号、并发访问连接数、以及分配多少内存来处理客户端的请求的参数
    2. memcached本身是一个非常轻量级的服务,不支持主辅同步,也没有集群的概念。但为了可扩展性,memcached 服务器server端和 memcached 客户client端结合起来可以构成一个分布式系统。在memcached分布式系统中,各个 memcached 节点之间无须通信,所以扩展性非常好。
    3. memcached采用的是异步I/O,其实现方式是基于事件的单进程和单线程。使用libevent作为事件通知机制,多个服务器端可以协同工作,但这些服务器端之间是没有任何通信联系的,每个服务器只对自己的数据进行管理。应用程序端通过指定缓存服务器的IP地址和端口,就可以连接memcached服务进行相互通信
    4. memcached是完全基于内存操作的,是一个缓存系统,从本质它不是一个数据库系统,也不支持持久化。因此存取速度非常快;但是断电数据即消失。

    1.4 Memcached作为高速运行的分布式缓存服务器具有以下特点。

    • 协议简单:memcached的服务器客户端通信并不使用复杂的MXL等格式,而是使用简单的基于文本的协议。
    • 基于libevent的事件处理:libevent是个程序库,他将Linux 的epoll、BSD类操作系统的kqueue等时间处理功能封装成统一的接口。memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。
    • 内置内存存储方式:为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached,重启操作系统会导致全部数据消失。另外,内容容量达到指定的值之后memcached回自动删除不适用的缓存。
    • Memcached不互通信的分布式:memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。他的分布式主要是通过客户端实现的。

    1.5 memcached 服务端安装

    memcached<1.4.5版本安装 

    1、解压下载的安装包到指定目录。

    2、在 1.4.5 版本以前 memcached 可以作为一个服务安装,使用管理员权限运行以下命令:

    .memcached.exe -d install

    注意:你需要使用真实的路径替代 .memcached.exe。

    3、然后我们可以使用以下命令来启动和关闭 memcached 服务:

    .memcached.exe -d start
    .memcached.exe -d stop

    note:

    在运行memcached.exe -d install的时候报错,failed to install service or service already installed。 
    是权限问题,因为服务安装需要以管理员身份运行cmd.exe

    4、如果要修改 memcached 的配置项, 可以在命令行中执行 regedit.exe 命令打开注册表并找到 "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesmemcached" 来进行修改。

    如果要提供 memcached 使用的缓存配置 可以修改 ImagePath 为:

    .memcached.exe -d runservice -m 512

    参数:

    PS D:appmemcached-1.4.4> .memcached.exe -h
    memcached 1.4.4-14-g9c660c0
    -p <num>      TCP port number to listen on (default: 11211)
    -U <num>      UDP port number to listen on (default: 11211, 0 is off)
    -s <file>     UNIX socket path to listen on (disables network support)
    -a <mask>     access mask for UNIX socket, in octal (default: 0700)
    -l <ip_addr>  interface to listen on (default: INADDR_ANY, all addresses)
    -s <file>     unix socket path to listen on (disables network support)
    -a <mask>     access mask for unix socket, in octal (default 0700)
    -l <ip_addr>  interface to listen on, default is INADDR_ANY
    -d start          tell memcached to start
    -d restart        tell running memcached to do a graceful restart
    -d stop|shutdown  tell running memcached to shutdown
    -d install        install memcached service
    -d uninstall      uninstall memcached service
    -r            maximize core file limit
    -u <username> assume identity of <username> (only when run as root)
    -m <num>      max memory to use for items in megabytes (default: 64 MB)
    -M            return error on memory exhausted (rather than removing items)
    -c <num>      max simultaneous connections (default: 1024)
    -k            lock down all paged memory.  Note that there is a
                  limit on how much memory you may lock.  Trying to
                  allocate more than that would fail, so be sure you
                  set the limit correctly for the user you started
                  the daemon with (not for -u <username> user;
                  under sh this is done with 'ulimit -S -l NUM_KB').
    -v            verbose (print errors/warnings while in event loop)
    -vv           very verbose (also print client commands/reponses)
    -vvv          extremely verbose (also print internal state transitions)
    -h            print this help and exit
    -i            print memcached and libevent license
    -P <file>     save PID in <file>, only used with -d option
    -f <factor>   chunk size growth factor (default: 1.25)
    -n <bytes>    minimum space allocated for key+value+flags (default: 48)
    -L            Try to use large memory pages (if available). Increasing
                  the memory page size could reduce the number of TLB misses
                  and improve the performance. In order to get large pages
                  from the OS, memcached will allocate the total item-cache
                  in one large chunk.
    -D <char>     Use <char> as the delimiter between key prefixes and IDs.
                  This is used for per-prefix stats reporting. The default is
                  ":" (colon). If this option is specified, stats collection
                  is turned on automatically; if not, then it may be turned on
                  by sending the "stats detail on" command to the server.
    -t <num>      number of threads to use (default: 4)
    -R            Maximum number of requests per event, limits the number of
                  requests process for a given connection to prevent
                  starvation (default: 20)
    -C            Disable use of CAS
    -b            Set the backlog queue limit (default: 1024)
    -B            Binding protocol - one of ascii, binary, or auto (default)
    -I            Override the size of each slab page. Adjusts max item size
                  (default: 1mb, min: 1k, max: 128m)
    memcache参数

    5、如果我们需要卸载 memcached ,可以使用以下命令:

    .memcached.exe -d uninstall

    memcached>=1.4.5版本安装 

    1、解压下载的安装包到指定目录。

    2、在 memcached1.4.5 版本之后,memcached 不能作为服务来运行,需要使用任务计划中来开启一个普通的进程,在 window 启动时设置 memcached自动执行。

    我们使用管理员身份执行以下命令将 memcached 添加来任务计划表中:

    schtasks /create /sc onstart /tn memcached /tr "'D:appmemcached-1.4.5memcached.exe' -m 512"

    注意:-m 512 意思是设置 memcached 最大的缓存配置为512M。

    3、如果需要删除 memcached 的任务计划可以执行以下命令:

    schtasks /delete /tn memcached

     1.6客户端使用

    直接用telnet作为客户端直接访问:

    telnet 127.0.0.1 11211

    找不到telnet

    1.6.1 在window是上启动telnet服务

    "win+R"调出运行框,在运行框里,输入"control"再回车确认即可打开控制面板

     

    在程序和功能项里找到
    “启用或关闭Windows功能“项,点击即可进入该选项,进入之后查看Windows系统自带的各种组件服务,

    其中打勾的表示已经安装并启用,没打勾的表示还没有启用,这时Telnet组件服务是默认没有启用的。

     

    通过telnet连接到memcached后,可以通过stats命令看缓存状态:

    STAT pid 5428
    STAT uptime 3054537999
    STAT time 268839299
    STAT version 1.4.4-14-g9c660c0
    STAT pointer_size 64
    STAT curr_connections 10
    STAT total_connections 11
    STAT connection_structures 11
    STAT cmd_get 0
    STAT cmd_set 0
    STAT cmd_flush 0
    STAT get_hits 0
    STAT get_misses 0
    STAT delete_misses 0
    STAT delete_hits 0
    STAT incr_misses 0
    STAT incr_hits 0
    STAT decr_misses 0
    STAT decr_hits 0
    STAT cas_misses 0
    STAT cas_hits 0
    STAT cas_badval 0
    STAT auth_cmds 0
    STAT auth_errors 0
    STAT bytes_read 7
    STAT bytes_written 0
    STAT limit_maxbytes 67108864
    STAT accepting_conns 1
    STAT listen_disabled_num 0
    STAT threads 4
    STAT conn_yields 0
    STAT bytes 0
    STAT curr_items 0
    STAT total_items 0
    STAT evictions 0
    END
    stats

    下面详细说下memcached的参数  

    参  数  名 作      用
    pid MemCache服务器的进程id
    uptime 服务器已经运行的秒数
    time 服务器当前的UNIX时间戳
    version MemCache版本
    pointer_size 当前操作系统指针大小,反映了操作系统的位数,64意味着MemCache服务器是64位的
    rusage_user 进程的累计用户时间
    rusage_system 进程的累计系统时间
    curr_connections  当前打开着的连接数
    total_connections  当服务器启动以后曾经打开过的连接数
    connection_structures 服务器分配的连接构造数
    cmd_get get命令总请求次数
    cmd_set set命令总请求次数
    cmd_flush flush_all命令总请求次数
    get_hits 总命中次数,重要,缓存最重要的参数就是缓存命中率,以get_hits / (get_hits + get_misses)表示,比如这个缓存命中率就是99.2%
    get_misses 总未命中次数
    auth_cmds 认证命令的处理次数
    auth_errors 认证失败的处理次数
    bytes_read 总读取的字节数
    bytes_written 总发送的字节数
    limit_maxbytes 分配给MemCache的内存大小(单位为字节)
    accepting_conns 是否已经达到连接的最大值,1表示达到,0表示未达到
    listen_disabled_num 统计当前服务器连接数曾经达到最大连接的次数,这个次数应该为0或者接近于0,如果这个数字不断增长, 就要小心我们的服务了
    threads 当前MemCache总线程数,由于MemCache的线程是基于事件驱动机制的,因此不会一个线程对应一个用户请求
    bytes 当前服务器存储的items总字节数
    current_items 当前服务器存储的items总数量
    total_items 自服务器启动以后存储的items总数量

    也可以查看内存状态:

    stats slabs                                                                                                             STAT 1:chunk_size 96                                                                                                    STAT 1:chunks_per_page 10922                                                                                            STAT 1:total_pages 1                                                                                                    STAT 1:total_chunks 10922                                                                                               STAT 1:used_chunks 0                                                                                                    STAT 1:free_chunks 1                                                                                                    STAT 1:free_chunks_end 10921                                                                                            STAT 1:mem_requested 0                                                                                                  STAT 1:get_hits 0                                                                                                       STAT 1:cmd_set 5                                                                                                        STAT 1:delete_hits 0                                                                                                    STAT 1:incr_hits 0                                                                                                      STAT 1:decr_hits 0                                                                                                      STAT 1:cas_hits 0                                                                                                       STAT 1:cas_badval 0                                                                                                     STAT active_slabs 1                                                                                                     STAT total_malloced 1048512                                                                                             END 
    stats slabs
    • chunk_size:chunk大小
    • chunk_per_page:每个page的chunk数量
    • total_pages:page数量
    • total_chunks:chunk数量*page数量
    • used_chunks:已被分配的chunk数量
    • free_chunks:曾经被使用,但是目前被回收的chunk数.
    • free_chunks_end:从来没被使用的chunk数
    • mem_requested:请求存储的字节数
    • active_slabs:活动的slabs.
    • total_malloced:实际已分配的内存数

    memcached常用命令:

    命    令 作    用
    get 返回Key对应的Value值
    add 添加一个Key值,没有则添加成功并提示STORED,有则失败并提示NOT_STORED
    set  无条件地设置一个Key值,没有就增加,有就覆盖,操作成功提示STORED
    replace 按照相应的Key值替换数据,如果Key值不存在则会操作失败
    stats 返回MemCache通用统计信息(下面有详细解读)
    stats items 返回各个slab中item的数目和最老的item的年龄(最后一次访问距离现在的秒数)
    stats slabs 返回MemCache运行期间创建的每个slab的信息(下面有详细解读)
    version 返回当前MemCache版本号
    flush_all 清空所有键值,但不会删除items,所以此时MemCache依旧占用内存
    quit 关闭连接

      添加缓存add格式:add key flags expiretime bytes databolck

  • 相关阅读:
    洛谷.3254.圆桌问题(最大流ISAP)
    BZOJ.2639.矩形计算(二维莫队)
    BZOJ.2724.[Violet 6]蒲公英(静态分块)
    BZOJ.4241.历史研究(回滚莫队 分块)
    BZOJ.4542.[HNOI2016]大数(莫队)
    SPOJ.COT2 Count on a tree II(树上莫队)
    BZOJ.3757.苹果树(树上莫队)
    洛谷.2325.[SCOI2005]王室联邦(贪心)
    BZOJ.1299.[LLH邀请赛]巧克力棒(博弈论 Nim)
    HDU.2516.取石子游戏(博弈论 Fibonacci Nim)
  • 原文地址:https://www.cnblogs.com/wqbin/p/12490244.html
Copyright © 2020-2023  润新知