您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 招标投标 > Memcached入门到精通[张振华.Jack]
张振华.JackQQ:494460705Mail:zhangzhenhua846@126.com2015年7月10年Java开发,3年App开发1自我介绍Memcached入门到精通I.Memcached介绍、应用场景、运行机制II.Memcached安装III.Memcached启动,参数IV.Memcached连接、监控V.Memcached客户端命令VI.Memcached的Java客户端实例VII.Memcached的客户端分布式原理VIII.Memcached的服务器端运行原理IX.Memcached的过期机制X.Memcached同比XI.QA2目录张振华.Jack介绍Memcached是国外社区网站LiveJournal的开发团队开发的高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。memcache是一个自由和开放源代码、高性能、分布式的内存对象缓存系统。用于加速动态web应用程序,减轻数据库负载。Memcached运行图Memcached运行图Meacached特征I.Memcached特征1.基于C/S架构,协议简单;2.基于libevent的事件处理;3.内置内存存储方式;4.基于客户端的memcached分布式。II.适用场景1.需要分布式部署的;2.需要频繁访问相同数据的;3.需要数据共享的。介绍C/S架构I.基于C/S架构,协议简单1.服务端启动memcached进程;2.客户端可以通过telnet操作,也可以通过各种编程语言实现的客户端程序存取数据及查询状态;3.memcached的服务器与客户端通信并不使用复杂的XML等格式,而使用简单的基于文本行的协议II.基于libevent的事件处理1.libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统:Windows/Linux/BSD/Solaris等操作系统的的事件处理;2.包装的接口包括:poll、select(Windows)、epoll(Linux)、kqueue(BSD)、/dev/pool(Solaris);3.Memcached使用libevent来进行网络并发连接的处理,能够保持在很大并发情况下,仍旧能够保持快速的响应能力。张振华.Jack7安装张振华.Jack8安装到~provos/libevent/下载一个最新版的libevent即可,解压,安装即可。张振华.Jack9MEMCACHED启动这算启动成功张振华.Jack10MEMCACHED启动成功张振华.Jack11MEMCACHED启动启动方式:-d以守护程序(daemon)方式运行-uroot指定用户,如果当前为root,需要使用此参数指定用户-P/tmp/a.pid保存PID到指定文件内存设置:-m1024数据内存数量,不包含memcached本身占用,单位为MB-M内存不够时禁止LRU,报错-n48初始chunk=key+suffix+value+32结构体,默认48字节-f1.25增长因子,默认1.25-L启用大内存页,可以降低内存浪费,改进性能连接设置:-l127.0.0.1监听的IP地址,本机可以不设置此参数-p11211TCP端口,默认为11211,可以不设置-U11211UDP端口,默认为11211,0为关闭并发设置:-c1024最大并发连接数,默认1024,最好是200-t4线程数,默认4。由于memcached采用NIO,所以更多线程没有太多作用-R20每个event连接最大并发数,默认20-C禁用CAS命令(可以禁止版本计数,减少开销)张振华.Jack12客户端连接张振华.Jack13客户端常用的命令张振华.Jack14客户端常用的命令张振华.Jack15客户端常用的命令张振华.Jack16客户端常用的命令memcached调试-v+输出error/warning-vv+输出命令/响应-vvv+输出内部状态[@10_10_82_80~]#memcached-d-uroot-m1024-p11210-vvv[@10_10_82_80~]#memcached-d-uroot-m1024-p11211–vvvslabclass1:chunksize96perslab10922slabclass2:chunksize120perslab8738......slabclass42:chunksize1048576perslab136serverlistening(auto-negotiate)37sendbufferwas126976,now26843545637serverlistening(udp)37serverlistening(udp)37serverlistening(udp)37serverlistening(udp)38newauto-negotiatingclientconnection38:Clientusingtheasciiprotocol38stats38getabc38END38quit38connectionclosed.telnetlocalhost11210/11211statsgetabcquitmemcached命令列表存储命令set/add/replace/append/prepend/cas读取命令get=bget?/gets删除命令delete计数命令incr/decr统计命令stats/settings/items/sizes/slabs工具memcached-tool存储命令commandset无论如何都进行存储add只有数据不存在时进行添加repalce只有数据存在时进行替换append往后追加:appendkeydatablockstatus?prepend往前追加:prependkeydatablockstatuscas按版本号更改key字符串,250个字符,不包含空格和控制字符flags客户端用来标识数据格式的数值,如json,xml,压缩等exptime存活时间s,0为永远,30天60*60*24*30为秒数,30天为unixtimebytesbyte字节数,不包含\r\n,根据长度截取存/取的字符串,可以是0,即存空串datablock文本行,以\r\n结尾,当然可以包含\r或\nstatusSTORED/NOT_STORED/EXISTS/NOT_FOUNDERROR/CLIENT_ERROR/SERVER_ERROR服务端会关闭连接以修复格式:commandkeyflagsexptimebytes[version]\r\ndatablock\r\nstatus\r\n存储命令set/add/replacesetliu3204javaSTORED//正确getliuVALUEabc324javaENDsetliu3204cplusCLIENT_ERRORbaddatachunkERROR//长度错误setliu3204javaSTOREDaddliu3205cplusNOT_STORED//已存在不能addgetliuVALUEabc324javaENDaddsong3205cplusSTORED//不存在可以addsetliu3204javaSTOREDreplaceliu3205cplusSTORED//已存在可以replacegetliuVALUEcplus325liuENDreplaceyang3205cplusNOT_STORED//不存在不能replacedatablock长度必须正确add只能添加不存在的keyreplace只能替换已有的key读取命令get/getsgetliusongyangVALUEliu324javaVALUEsong325cplusEND//查询多个键值getsliuVALUEliu32412javaEND//取得版本号replaceliu3204javaSTORED//增加版本号getliuVALUEliu324javaENDgetsliuVALUEliu32413javaEND格式:commandkey*\r\nVALUEkey1flagsbytes[version]\r\ndatablock\r\n…VALUEkeynflagsbytes[version]\r\ndatablock\r\nEND\r\ncommand:get普通查询,gets用于查询带版本的值版本号+1检查存储命令cascas即checkandset,只有版本号相匹配时才能存储,否则返回EXISTS设计意图:解决多客户端并发修改同一条记录的问题,防止使用经过改变了的value/key对casliu320512cplusEXISTSgetsliuVALUEliu32413javaEND//版本号不同不修改casliu320513cplusSTOREDgetsliuVALUEliu32514cplusEND//版本号相同才修改当前版本号为13,按12不能修改当前版本号为13,按13可以修改计数命令incr/decr格式:incr/decrkeyintint要求:key必须存在,value必须是数字setcount32011STOREDincrcount89decrcount27deletecountDELETEDincrcount1NOT_FOUNDincrliu2CLIENT_ERRORcannotincrementordecrementnon-numericvalue实现计数器key不存在不能计数value不是数字不能计数删除命令delete格式:deletekey[time]DELETE\r\ntime:秒数或Unixtime,在time时间内不能add或replace,但能set,不能get。过期后才能够重新set有效并能getdeleteliuDELETEDgetliuEND统计命令statsstatsSTATpid23178STATuptime1039318STATtime1292036037STATversion1.4.2STATpointer_size64STATrusage_user1011.574217STATrusage_system1677.713948STATcurr_connections114STATtotal_connections73801STATconnection_structures149STATcmd_get79114939STATcmd_set27302514STATcmd_flush0STATget_hits79114939STATget_misses24322507STATdelete_misses133928STATdelete_hits402569STATincr_misses0STATincr_hits0STATdecr_misses0STATdecr_hits0STATcas_misses0STATcas_hits0STATcas_badval0STATauth_cmds0STATauth_errors0STATbytes_read59348603658STATbytes_written425549797158STATlimit_maxbytes4294967296STATaccepting_conns1STATlisten_disabled_num0STATthreads4STATconn_yields0STATbytes3832761746STATcurr_items2854731STATtotal_items27302514STATevictions18456987STATreclaimed0END格式:sta
本文标题:Memcached入门到精通[张振华.Jack]
链接地址:https://www.777doc.com/doc-5503287 .html