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:\Windows\System32,找到cmd.exe,右键选择“以管理员身份运行”即可。或者在点击左下角的开始按钮 -> 在弹出的框框中找到命令行图标 -> 右键图标 -> 更多 -> 以管理员身份运行。 这时memcache应该可以起来了,直接在memcached的安装目录双击memcached.exe也能启动。关闭就更简单了,直接把命令行关了就ok了。

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

telnet 127.0.0.1 

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

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

memcached -m  -p  

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

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

  注意:以上命令连接到memcached后窗口光标会一直闪烁,无法继续命令,所以需要打开新窗口执行telnet命令。另外该命令在窗口关闭后失效。

  通过telnet连接到memcached后(我本机连过去后是黑屏,不过执行一条命令后就能显示了),可以通过stats命令看缓存状态:

STAT pid
STAT uptime
STAT time
STAT version 1.4.--g9c660c0
STAT pointer_size
STAT curr_connections
STAT total_connections
STAT connection_structures
STAT cmd_get
STAT cmd_set
STAT cmd_flush
STAT get_hits
STAT get_misses
STAT delete_misses
STAT delete_hits
STAT incr_misses
STAT incr_hits
STAT decr_misses
STAT decr_hits
STAT cas_misses
STAT cas_hits
STAT cas_badval
STAT auth_cmds
STAT auth_errors
STAT bytes_read
STAT bytes_written
STAT limit_maxbytes
STAT accepting_conns
STAT listen_disabled_num
STAT threads
STAT conn_yields
STAT bytes
STAT curr_items
STAT total_items
STAT evictions
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
java
STORED
get wlf
VALUE wlf
java
END

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

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

 
command set无论如何都进行存储
add只有数据不存在时进行添加
repalce只有数据存在时进行替换
append往后追加:append <key> datablock <status>
prepend往前追加:prepend <key> datablock <status>
cas按版本号更改
客户端用来标识数据格式的数值,如json,xml,压缩等
不包含\r\n,根据长度截取存/取的字符串,可以是0,即存空串
datablock 文本行,以\r\n结尾,当然可以包含\r或\n
status STORED/NOT_STORED/EXISTS/NOT_FOUND
ERROR/CLIENT_ERROR/SERVER_ERROR服务端会关闭连接以修复

memcache使用经历的更多相关文章

  1. Memcache 内存分配策略和性能(使用)状态检查

    前言: 一直在使用Memcache,但是对其内部的问题,如它内存是怎么样被使用的,使用一段时间后想看看一些状态怎么样?一直都不清楚,查了又忘记,现在整理出该篇文章,方便自己查阅.本文不涉及安装.操作. ...

  2. 【memcache缓存专题(1)】memcache的介绍与应用场景

    简介 Memcached是一个高性能的分布式的内存对象缓存系统,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各 ...

  3. 一次优化web项目的经历记录(三)

    一次优化web项目的经历记录 这段时间以来的总结与反思 前言:最近很长一段时间没有更新博客了,忙于一堆子项目的开发,严重拖慢了学习与思考的进程. 开水倒满了需要提早放下杯子,晚了就会烫手,这段时间以来 ...

  4. 使用Memcache在PHP中调试方法的介绍及应用

    使用Memcache在PHP中调试方法的介绍及应用 如果我们在网络开发中,特别是大访问量的web项目开发中,为了提高响应速度,减少数据查询运算,那么我们都会选用memcahce.首先我们必须要安装,接 ...

  5. Memcache 内存分配策略和性能(使用)状态检查【转】

    前言: 一直在使用Memcache,但是对其内部的问题,如它内存是怎么样被使用的,使用一段时间后想看看一些状态怎么样?一直都不清楚,查了又忘记,现在整理出该篇文章,方便自己查阅.本文不涉及安装.操作. ...

  6. 阿里面试经历JAVA总结

    为记录阿里的电面经历,特与大家分享,岗位是JAVA研发工程师. 一面主要问题如下: 1)首先自我介绍 2)数据结构算法的基本问题,如排序算法,二叉树遍历,后序遍历非递归,图的最短路径问题 3)对一个数 ...

  7. 一次mysql优化经历

    某日运维突然说无线终端的频道页接口訪问量非常大,memcache缓存扛只是来.导致mysql并发查询量太大,导致server不停地宕机,仅仅能不停地重新启动机器.遗憾的是运维并没有告诉mysql查询量 ...

  8. PHP之Memcache缓存详解

         Mem:memory缩写(内存):内存缓存 1.  断电或者重启服务器内存数据即消失,即临时数据: Memcache默认端口:11211 存入方式:key=>>value    ...

  9. 走进缓存的世界(三) - Memcache

    系列文章 走进缓存的世界(一) - 开篇 走进缓存的世界(二) - 缓存设计 走进缓存的世界(三) - Memcache 简介 Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用 ...

随机推荐

  1. 第二篇:Spark SQL Catalyst源码分析之SqlParser

    /** Spark SQL源码分析系列文章*/ Spark SQL的核心执行流程我们已经分析完毕,可以参见Spark SQL核心执行流程,下面我们来分析执行流程中各个核心组件的工作职责. 本文先从入口 ...

  2. 2.scala控制结构、函数、异常处理

    2.scala控制结构.函数.异常处理---小书匠,在线编辑器,MARKDOWN,Evernote,文件版本 a:focus { outline: thin dotted #333; outline: ...

  3. Navicat Premium 10/12——破解激活

    Navicat Premium 12官方Windows64位百度云 链接:https://pan.baidu.com/s/1hGmDljszQsUoi194CYdfmA 密码:1xff 官方下载链接 ...

  4. Ajax -- 原理及简单示例

    1. 什么是Ajax •Ajax被认为是(AsynchronousJavaScript and XML的缩写).现在,允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax. 2. Ajax ...

  5. hermite插值

    Hermite 插值就是要求插值函数不仅经过所给节点,而且要保证在该点的导数也相等.<备注:虽然还不理解这句话,但是还是先放这里!> 所谓样条曲线(Spline Curves)是指给定一组 ...

  6. LeetCode第[46]题(Java):Permutations(求所有全排列) 含扩展——第[47]题Permutations 2

    题目:求所有全排列 难度:Medium 题目内容: Given a collection of distinct integers, return all possible permutations. ...

  7. LeetCode第[17]题(Java):Letter Combinations of a Phone Number

    题目:最长公共前缀 难度:EASY 题目内容: Given a string containing digits from 2-9 inclusive, return all possible let ...

  8. 使用ssm整合是创建Maven项目报错Failure to transfer com.thoughtworks.xstream:xstream:pom:1.3.1

    Description Resource Path Location TypeFailure to transfer com.thoughtworks.xstream:xstream:pom:1.3. ...

  9. netty的异常分析 IllegalReferenceCountException refCnt: 0

    netty的异常 IllegalReferenceCountException refCnt: 0 这是因为Netty有引用计数器的原因,自从Netty 4开始,对象的生命周期由它们的引用计数(ref ...

  10. redis、kafka、rabittMQ对比 (转)

    本文不对三者之间的性能进行对比,只是从三者的特性上区分他们,并指出三者的不用应用场景. 1.publish/subscribe 发布订阅模式如下图所示可以具有多个生产者和发布者,redis.kafka ...