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. [BZOJ1257]余数之和

    Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值 其中k mod i表示k除以i的余数. 例如j(5 ...

  2. HttpStatusCode

    https://docs.microsoft.com/en-us/dotnet/api/system.net.httpstatuscode?view=netframework-4.7.2 422 Un ...

  3. Rancher+K8S部署手册

    目前创建K8S集群的安装程序最受欢迎的有Kops,Kubespray,kubeadm,rancher,以及个人提供的脚本集等. Kops和Kubespary在国外用的比较多,没有处理中国的网络问题,没 ...

  4. scala学习手记5 - 元组与多重赋值

    假定要在一个方法中返回多个值.比如需要返回一个人的名.姓和邮箱地址.在Java中最常用的方法是定义一个Person类,其中包括相对应的字段:还有些不常用的方法就是返回一个集合或数组,拿到结果后再进行循 ...

  5. TCP_AIO_Server_ZC_01

    ZC: 这个例子是,1个skt 投递 1个未决的接收操作 1.package aio.Client; 1.1.这是一个 测试的客户端的代码: package aio.Client; import ja ...

  6. MongoDB在linux下的启动

    最近公司数据库用到MongoDB,而之前只关注知道它是分布式非关系数据库,数据以文档的形式存储,数据格式是类似json的bson格式.而对于具体用法以及java如何调用并没有过多接触,今天花费一天的时 ...

  7. softmax实现(程序逐句讲解)

    上一个博客已经讲了softmax理论部分,接下来我们就来做个实验,我们有一些手写字体图片(28*28),训练样本(train-images.idx3-ubyte里面的图像对应train-labels. ...

  8. Apk大瘦身

    Android的apk文件越来越大了这已经是一个不争的事实.在Android 还是最初版本的时候,一个app的apk文件大小也还只有2 MB左右,到了现在,一个app的apk文件大小已经升级到10MB ...

  9. 集合类Collection Map

    数组与集合的区别:数组虽然也可以存储对象,但长度是固定的:集合的长度是可变的,数组中可以存储基本数据类型,集合只能存储对象. 集合特点:1.用于存储对象:  2.长度可变: 3.可存储不同对象: 一. ...

  10. Android Framework 简介

    Android Framework 简介 简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有详记,结果被很多公司技术人员鄙视了,为了减少自己的短板,重新复习了一遍C++.java.Androi ...