zoukankan      html  css  js  c++  java
  • memcache使用经历

      memcache可以看成是一个大内存库,因为可以集群,所以可以看成是无限大的内存库。既然是内存库,那么我们放的就是一些map了。map里就键值对,虽然内存可以通过集群的方式无限扩展,但单个键值对的大小确是受限的。目前memcache的单个缓存key最大是250字节,也就是不能超过250个字符(ASCII码),value最大是1M。另外memcache虽说也是可以设置永久缓存的,但其实这里的“永久”就是30天,过期时间一到map就失效了。

      我用的是64位的win10操作系统,直接到memcache官网只能下载到Linux版本的,windows版本的64位memcached-win64-1.4.4-14下载地址:http://static.runoob.com/download/memcached-win64-1.4.4-14.zip,解压到E盘memcached目录后,打开命令行窗口,进入到我们的memcached目录,执行安装命令:

    E:memcached>memcached.exe -d install

      执行启动命令:

    E:memcached>memcached.exe -d start

      如果执行以上命令报错failed to install service or service already installed,说明没有执行权限。进入到C:WindowsSystem32,找到cmd.exe,右键选择“以管理员身份运行”即可。或者在点击左下角的开始按钮 -> 在弹出的框框中找到命令行图标 -> 右键图标 -> 更多 -> 以管理员身份运行。 这时memcache应该可以起来了,直接在memcached的安装目录双击memcached.exe也能启动。关闭就更简单了,直接把命令行关了就ok了。

      那么如何通过memcached客户端连接到服务端呢?可以通过telnet来连接,因为默认端口是11211,所以使用连接命令如下即可

    telnet 127.0.0.1 11211

      如果执行telnet被告知“不是内部或外部命令”,说明没打开执行权限。打开方法:控制面板->程序->程序和功能->启用或关闭Windows功能->telnet客户端打开、确定。

      如果想换端口,比如换到11200端口,执行如下命令

    memcached -m 1024 -p 11200 

      参数m是用来指定缓存的内存大小的,单位是M,所以这里指定的是1G。其他参数如下:

      -d 选项是启动一个守护进程,
      -u 是运行Memcache的用户
      -l 是监听的服务器IP地址
      -c 选项是最大运行的并发连接数,默认是1024
      -P 是设置保存Memcache的pid文件

      注意:以上命令连接到memcached后窗口光标会一直闪烁,无法继续命令,所以需要打开新窗口执行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

      下面详细说下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总数量

      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

    add wlf 32 0 4
    java
    STORED
    get wlf
    VALUE wlf 32 4
    java
    END

      注意bytes的字节数必须要跟databolck对应起来。比如我这里是4,那么对应的“java”就必须是4位的字符串,否则将报错”CLIENT_ERROR bad data chunk“。执行add命令的前提是key必须不存在,否则将直接抛出一个ERROR。set命令可以覆盖已存在的key值。下面再把参数详细说明一下:

    <command> <key> <flags> <exptime> <bytes> [<version>]
    < datablock>
    < status>

     
    command set无论如何都进行存储
    add只有数据不存在时进行添加
    repalce只有数据存在时进行替换
    append往后追加:append <key> datablock <status>
    prepend往前追加:prepend <key> datablock <status>
    cas按版本号更改
    客户端用来标识数据格式的数值,如json,xml,压缩等
    不包含 ,根据长度截取存/取的字符串,可以是0,即存空串
    datablock 文本行,以 结尾,当然可以包含 或
    status STORED/NOT_STORED/EXISTS/NOT_FOUND
    ERROR/CLIENT_ERROR/SERVER_ERROR服务端会关闭连接以修复
  • 相关阅读:
    SQL注入原理解说,非常不错!
    Asp.Netserver控件开发的Grid实现(三)列编辑器
    Windows下搭建deepnet环境
    reactor设计模式
    C++ 表达式语句 海伦的故事
    [ArcGIS必打补丁]ArcGIS 10.1 SP1 for (Desktop, Engine, Server) Quality Improvement Patch
    四个好看的CSS样式表格
    UVA 10047 The Monocycle (状态记录广搜)
    二叉搜索树相关性质的应用
    广播(broadcast)、电视与电视网络
  • 原文地址:https://www.cnblogs.com/wuxun1997/p/7745144.html
Copyright © 2011-2022 走看看