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:\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使用经历的更多相关文章
- Memcache 内存分配策略和性能(使用)状态检查
前言: 一直在使用Memcache,但是对其内部的问题,如它内存是怎么样被使用的,使用一段时间后想看看一些状态怎么样?一直都不清楚,查了又忘记,现在整理出该篇文章,方便自己查阅.本文不涉及安装.操作. ...
- 【memcache缓存专题(1)】memcache的介绍与应用场景
简介 Memcached是一个高性能的分布式的内存对象缓存系统,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各 ...
- 一次优化web项目的经历记录(三)
一次优化web项目的经历记录 这段时间以来的总结与反思 前言:最近很长一段时间没有更新博客了,忙于一堆子项目的开发,严重拖慢了学习与思考的进程. 开水倒满了需要提早放下杯子,晚了就会烫手,这段时间以来 ...
- 使用Memcache在PHP中调试方法的介绍及应用
使用Memcache在PHP中调试方法的介绍及应用 如果我们在网络开发中,特别是大访问量的web项目开发中,为了提高响应速度,减少数据查询运算,那么我们都会选用memcahce.首先我们必须要安装,接 ...
- Memcache 内存分配策略和性能(使用)状态检查【转】
前言: 一直在使用Memcache,但是对其内部的问题,如它内存是怎么样被使用的,使用一段时间后想看看一些状态怎么样?一直都不清楚,查了又忘记,现在整理出该篇文章,方便自己查阅.本文不涉及安装.操作. ...
- 阿里面试经历JAVA总结
为记录阿里的电面经历,特与大家分享,岗位是JAVA研发工程师. 一面主要问题如下: 1)首先自我介绍 2)数据结构算法的基本问题,如排序算法,二叉树遍历,后序遍历非递归,图的最短路径问题 3)对一个数 ...
- 一次mysql优化经历
某日运维突然说无线终端的频道页接口訪问量非常大,memcache缓存扛只是来.导致mysql并发查询量太大,导致server不停地宕机,仅仅能不停地重新启动机器.遗憾的是运维并没有告诉mysql查询量 ...
- PHP之Memcache缓存详解
Mem:memory缩写(内存):内存缓存 1. 断电或者重启服务器内存数据即消失,即临时数据: Memcache默认端口:11211 存入方式:key=>>value ...
- 走进缓存的世界(三) - Memcache
系列文章 走进缓存的世界(一) - 开篇 走进缓存的世界(二) - 缓存设计 走进缓存的世界(三) - Memcache 简介 Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用 ...
随机推荐
- Netty-SocketIO的Web推送实战应用
netty-socketio是一个开源的Socket.io服务器端的一个java的实现, 它基于Netty框架.可应用于服务端主动推送消息到客户端等场景,比如说股票价格变化.k线图的走势,和webso ...
- sem学习
关键字的选取搜索引擎营销的关键字选取是非常重要的一步,合适的关键字可以为企业带来可观的咨询量.关键字一般分4种,品牌词,产品词,行业词,竞品词,对于这四类词不同的推广策略有着不同的侧重点,根据市场情况 ...
- Git和GitHub相关
组员从GitHub上下载项目并上传项目的步骤如下 .组员接收到组长发的项目地址,组员需要从GitHub上把项目克隆下来,首先组员 需要在本地的一个文件夹里打开git,然后运行如下代码:git clon ...
- bzoj 2190: [SDOI2008]仪仗队 线性欧拉函数
2190: [SDOI2008]仪仗队 Time Limit: 10 Sec Memory Limit: 259 MB[Submit][Status][Discuss] Description 作为 ...
- python之list,tuple,str,dic简单记录(一)
list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目.列表中的项目.列表中的项目应该包括在方括号中,这样python就知道你是在指明一个列表.一旦你创建了一个列表,你就可以添加 ...
- 关于Action和EventHandler
.net框架自带的两个常用类(Action和EventHandler),当然这两个类型的也可以自定义,但系统已经提供,直接拿来用即可,很方便 1:Action : 引用“void方法”的委托,目前框架 ...
- 如何学好C++语言
前段时间写了一篇如何学好C语言,就有人回复问我如何学好C++,所以,我把我个人的一些学习经验写在这里,希望对大家有用.首先,因为如何学好C语言中谈到了算法和系统,所以这里就只谈C++语言. C++是最 ...
- 打造万能的Python开发环境
一.下载与安装 python的版本众多,主流的分2和3,还有各种小版本. django等也有众多版本. 在我们开发过程中,为使用不同的版本测试,在一台电脑上进行只能进行替换. 为了简化.我们使用con ...
- #define GPFCON (* (volatile unsigned long * )0x56000050 )
int a; int *p; p = &a; *p = 0x100; //a=0x100 p = (int *)0x56000050; *p =0x100; *( ( int * ) 0x56 ...
- MySQL index merge
深入理解 index merge 是使用索引进行优化的重要基础之一. [ index merge] 当where谓词中存在多个条件(或者join)涉及到多个字段,它们之间进行 AND 或者 ...