Memcached入门到精通张振华Jack.pdf
- 文档编号:3437777
- 上传时间:2023-05-05
- 格式:PDF
- 页数:75
- 大小:5.83MB
Memcached入门到精通张振华Jack.pdf
《Memcached入门到精通张振华Jack.pdf》由会员分享,可在线阅读,更多相关《Memcached入门到精通张振华Jack.pdf(75页珍藏版)》请在冰点文库上搜索。
张振华张振华.Jack.JackQQ:
494460705QQ:
494460705Mail:
Mail:
20152015年年77月月1010年年JavaJava开发,开发,33年年AppApp开发开发1自我介绍自我介绍Memcached入门到精通I.I.MemcachedMemcached介绍、应用场景、运行机制介绍、应用场景、运行机制II.II.MemcachedMemcached安装安装III.III.MemcachedMemcached启动,参数启动,参数IV.IV.MemcachedMemcached连接、监控连接、监控V.V.MemcachedMemcached客户端命令客户端命令VI.VI.MemcachedMemcached的的JavaJava客户端实例客户端实例VII.VII.MemcachedMemcached的客户端分布式原理的客户端分布式原理VIII.VIII.MemcachedMemcached的服务器端运行原理的服务器端运行原理IX.IX.MemcachedMemcached的过期机制的过期机制X.X.MemcachedMemcached同比同比XI.XI.QAQA2目录目录张振华.Jack介绍介绍MemcachedMemcached是国外社区网站是国外社区网站LiveJournalLiveJournal的开发团队开的开发团队开发的高性能的分布式内存缓存服务器。
一般的使用目的是发的高性能的分布式内存缓存服务器。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提,通过缓存数据库查询结果,减少数据库访问次数,以提高动态高动态WebWeb应用的速度、提高可扩展性。
应用的速度、提高可扩展性。
memcachememcache是一个自由和开放源代码、高性能、分布式的是一个自由和开放源代码、高性能、分布式的内存对象缓存系统。
用于加速动态内存对象缓存系统。
用于加速动态webweb应用程序,减轻数应用程序,减轻数据库负载。
据库负载。
MemcachedMemcached运行图运行图MemcachedMemcached运行图运行图MeacachedMeacached特征特征I.I.MemcachedMemcached特征特征1.1.基于基于C/SC/S架构,协议简单架构,协议简单;2.2.基于基于libeventlibevent的事件处理的事件处理;3.3.内置内存存储方式内置内存存储方式;4.4.基于客户端的基于客户端的memcachedmemcached分布式。
分布式。
II.II.适用场景适用场景1.1.需要分布式部署的;需要分布式部署的;2.2.需要频繁访问相同数据的;需要频繁访问相同数据的;3.3.需要数据共享的。
需要数据共享的。
介绍介绍C/SC/S架构架构I.I.基于基于C/SC/S架构,协议简单架构,协议简单1.1.服务端启动服务端启动memcachedmemcached进程;进程;2.2.客户端可以通过客户端可以通过telnettelnet操作,也可以通过各种编程语言实现的客户端程序存取数据操作,也可以通过各种编程语言实现的客户端程序存取数据及查询状态;及查询状态;3.3.memcachedmemcached的服务器与客户端通信并不使用复杂的的服务器与客户端通信并不使用复杂的XMLXML等格式,而使用简单的等格式,而使用简单的基于文本行的协议基于文本行的协议II.II.基于基于libeventlibevent的事件处理的事件处理1.1.libeventlibevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统:
是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统:
Windows/Linux/BSD/SolarisWindows/Linux/BSD/Solaris等操作系统的的事件处理;等操作系统的的事件处理;2.2.包装的接口包括:
包装的接口包括:
pollpoll、select(Windows)select(Windows)、epollepoll(Linux)(Linux)、kqueuekqueue(BSD)(BSD)、/dev/pool(Solaris)/dev/pool(Solaris);3.3.MemcachedMemcached使用使用libeventlibevent来进行网络并发连接的处理,能够保持在很大并发情来进行网络并发连接的处理,能够保持在很大并发情况下,仍旧能够保持快速的响应能力。
况下,仍旧能够保持快速的响应能力。
张振华.Jack7安装安装张振华.Jack8安装安装到http:
/www.monkey.org/provos/libevent/下载一个最新版的libevent即可,解压,安装即可。
张振华.Jack9MEMCACHEDMEMCACHED启动启动这算启动成功张振华.Jack10MEMCACHEDMEMCACHED启动成功启动成功张振华.Jack11MEMCACHEDMEMCACHED启动启动启动方式:
启动方式:
-dd以守护程序(以守护程序(daemondaemon)方式运行)方式运行-urooturoot指定用户,如果当前为指定用户,如果当前为rootroot,需要使用此参数指定用户,需要使用此参数指定用户-P/P/tmptmp/a.pida.pid保存保存PIDPID到指定文件到指定文件内存设置:
内存设置:
-m1024m1024数据内存数量,不包含数据内存数量,不包含memcachedmemcached本身占用,单位为本身占用,单位为MBMB-MM内存不够时禁止内存不够时禁止LRULRU,报错,报错-n48n48初始初始chunk=key+suffix+value+32chunk=key+suffix+value+32结构体,默认结构体,默认4848字节字节-f1.25f1.25增长因子,默认增长因子,默认1.251.25-LL启用大内存页,可以降低内存浪费,改进性能启用大内存页,可以降低内存浪费,改进性能连接设置:
连接设置:
-l127.0.0.1l127.0.0.1监听的监听的IPIP地址,本机可以不设置此参数地址,本机可以不设置此参数-p11211p11211TCPTCP端口,默认为端口,默认为1121111211,可以不设置,可以不设置-U11211U11211UDPUDP端口,默认为端口,默认为1121111211,00为关闭为关闭并发设置:
并发设置:
-c1024c1024最大并发连接数,默认最大并发连接数,默认10241024,最好是,最好是200200-t4t4线程数,默认线程数,默认44。
由于。
由于memcachedmemcached采用采用NIONIO,所以更多线程没有太多作用,所以更多线程没有太多作用-R20R20每个每个eventevent连接最大并发数,默认连接最大并发数,默认2020-CC禁用禁用CASCAS命令(可以禁止版本计数,减少开销)命令(可以禁止版本计数,减少开销)张振华.Jack12客户端连接客户端连接张振华.Jack13客户端常用的命令客户端常用的命令张振华.Jack14客户端常用的命令客户端常用的命令张振华.Jack15客户端常用的命令客户端常用的命令张振华.Jack16客户端常用的命令客户端常用的命令memcachedmemcached调试调试-vv+输出输出error/warningerror/warning-vvvv+输出命令输出命令/响应响应-vvvvvv+输出内部状态输出内部状态10_10_82_80#memcached-d-uroot-m1024-p11210-vvv10_10_82_80#memcached-d-uroot-m1024-p11211vvvslabclass1:
chunksize96perslab10922slabclass2:
chunksize120perslab8738.slabclass42:
chunksize1048576perslab136serverlistening(auto-negotiate)37sendbufferwas126976,now26843545637serverlistening(udp)37serverlistening(udp)37serverlistening(udp)37serverlistening(udp)38newauto-negotiatingclientconnection38:
Clientusingtheasciiprotocol38stats38END38quit38connectionclosed.telnetlocalhost11210/11211statsgetabcquitmemcachedmemcached命令列表命令列表存储命令存储命令set/add/replace/append/prepend/casset/add/replace/append/prepend/cas读取命令读取命令getget=bget?
=bget?
/gets/gets删除命令删除命令deletedelete计数命令计数命令incr/decrincr/decr统计命令统计命令stats/settings/items/sizes/slabsstats/settings/items/sizes/slabs工具工具memcachedmemcached-tooltool存储命令存储命令commandset无论如何都进行存储add只有数据不存在时进行添加repalce只有数据存在时进行替换append往后追加:
appenddatablock?
prepend往前追加:
prependdatablockcas按版本号更改key字符串,250个字符,不包含空格和控制字符flags客户端用来标识数据格式的数值,如json,xml,压缩等exptime存活时间s,0为永远,30天为unixtimebytesbyte字节数,不包含rn,根据长度截取存/取的字符串,可以是0,即存空串datablock文本行,以rn结尾,当然可以包含r或nstatusSTORED/NOT_STORED/EXISTS/NOT_FOUNDERROR/CLIENT_ERROR/SERVER_ERROR服务端会关闭连接以修复格式:
rnrnrn存储命令存储命令set/add/replaceset/add/replacesetliu3204javaSTORED/正确getliuVALUEabc324javaENDsetliu3204cplusCLIENT_ERRORbaddatachunkERROR/长度错误setliu3204javaSTOREDaddliu3205cplusNOT_STORED/已存在不能addgetliuVALUEabc324javaENDaddsong3205cplusSTORED/不存在可以addsetliu3204javaSTOREDreplaceliu3205cplusSTORED/已存在可以replacegetliuVALUEcplus325liuENDreplaceyang3205cplusNOT_STORED/不存在不能replacedatablock长度必须正确add只能添加不存在的keyreplace只能替换已有的key读取命令读取命令get/getsget/getsgetliusongyangVALUEliu324javaVALUEsong325cplusEND/查询多个键值getsliuVALUEliu32412javaEND/取得版本号replaceliu3204javaSTORED/增加版本号getliuVALUEliu324javaENDgetsliuVALUEliu32413javaEND格式:
*rnVALUErnrnVALUErnrnENDrncommand:
get普通查询,gets用于查询带版本的值版本号+1检查存储命令检查存储命令cascascas即checkandset,只有版本号相匹配时才能存储,否则返回EXISTS设计意图:
解决多客户端并发修改同一条记录的问题,防止使用经过改变了的value/key对casliu320512cplusEXISTSgetsliuVALUEliu32413javaEND/版本号不同不修改casliu320513cplusSTOREDgetsliuVALUEliu32514cplusEND/版本号相同才修改当前版本号为13,按12不能修改当前版本号为13,按13可以修改计数命令计数命令incr/decrincr/decr格式:
incr/decr要求:
key必须存在,value必须是数字setcount32011STOREDincrcount89decrcount27deletecountDELETEDincrcount1NOT_FOUNDincrliu2CLIENT_ERRORcannotincrementordecrementnon-numericvalue实现计数器key不存在不能计数value不是数字不能计数删除命令删除命令deletedelete格式:
deleteDELETErntime:
秒数或Unixtime,在time时间内不能add或replace,但能set,不能get。
过期后才能够重新set有效并能getdeleteliuDELETEDgetliuEND统计命令统计命令statsstatsstatsSTATpid23178STATuptime1039318STATtime1292036037STATversion1.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格式:
statsrnSTATrnENDrnstatsstats统计项统计项名称描述pidMemcached进程IDuptimeMemcached运行时间,单位:
秒timeMemcached当前的UNIX时间versionMemcached的版本号rusage_user该进程累计的用户时间,单位:
秒rusage_system该进程累计的系统时间,单位:
秒curr_connections当前连接数量total_connectionsMemcached运行以来接受的连接总数connection_structuresMemcached分配的连接结构的数量cmd_get查询请求总数get_hits查询成功获取数据的总次数get_misses查询成功未获取到数据的总次数cmd_set存储(添加/更新)请求总数bytesMemcached当前存储内容所占用字节数bytes_readMemcached从网络读取到的总字节数bytes_writtenMemcached向网络发送的总字节数limit_maxbytesMemcached在存储时被允许使用的字节总数curr_itemsMemcached当前存储的内容数量total_itemsMemcached启动以来存储过的内容总数evictionsLRU释放对象数,用来释放内存分析CPU占用是否高分析连接数是否太多分析命中率是否太低分析字节数流量分析对象数LRU频率statssettingsstatssettings查看设置查看设置statssettingsSTATmaxbytes0STATmaxconns1024STATtcpport11213STATudpport11211STATinterNULLSTATverbosity0STAToldest0STATevictionsonSTATdomain_socketNULLSTATumask700STATgrowth_factor1.25STATchunk_size48STATnum_threads4STATstat_key_prefix:
STATdetail_enablednoSTATreqs_per_event20STATcas_enabledyesSTATtcp_backlog1024STATbinding_protocolauto-negotiateSTATitem_size_max1048576END名称描述maxbytes最大字节数限制,0无限制maxconns允许最大连接数tcpportTCP端口udpportUDP端口interverbosity日志0=none,1=som,2=lotsoldest最老对象过期时间evictionson/off,是否禁用LRUdomain_socketsocket的domainumask创建Socket时的umaskgrowth_factor增长因子chunk_sizekey+value+flags大小num_threads线程数,可以通过-t设置,默认4stat_key_prefixstats分隔符detail_enabledyes/no,显示stats细节信息reqs_per_event最大IO吞吐量(每event)cas_enabledyes/no,是否启用CAS,-C禁用tcp_backlogTCP监控日志auth_enabled_saslyes/no,是否启用SASL验证statsitemsstatsitems数据项统计数据项统计statsitemsSTATitems:
1:
number10922STATitems:
1:
age350988STATitems:
1:
evicted3829STATitems:
1:
evicted_nonzero0STATitems:
1:
evicted_time690209STATitems:
1:
outofmemory0STATitems:
1:
tailrepairs0STATitems:
2:
number375734STATitems:
2:
age898762STATitems:
2:
evicted2661399STATitems:
2:
evicted_nonzero0STATitems:
2:
evicted_time142500STATitems:
2:
outofmemory0STATitems:
2:
tailrepairs0.STATitems:
40:
number14STATitems:
40:
age977359STATitems:
40:
evicted25STATitems:
40:
evicted_nonzero0STATitems:
40:
evicted_time60653STATitems:
40:
outofmemory0STATitems:
40:
tailrepairs0END名称描述number该slab中对象数,不包含过期对象ageLRU队列中最老对象的过期时间evictedLRU释放对象数evicted_nonzero设置了非0时间的LRU释放对象数evicted_time最后一次LRU秒数,监控频率outofmemory不能存储对象次数,使用-M会报错tailrepairs修复slabs次数reclaimed使用过期对象空间存储对象次数statssizesstatssizes对象数量统计对象数量统计statssizesSTAT9610922STAT128375734STAT160200416STAT192816311STAT2248685STAT2563321STAT2883549STAT320826STAT352427END格式:
STAT注意:
会锁定服务,暂停处理请求statsslabsstatsslabs区块统计区块统计statsslabsSTAT1:
chunk_size96STAT1:
chunks_per_page10922.STAT40:
chunk_size1048576STAT40:
chunks_per_page1STAT40:
total_pages15STAT40:
total_chunks15STAT40:
used_chunks14STAT40:
free_chunks1STAT40:
free_chunks_end0STAT40:
mem_requested9348752STAT40:
get_hits9593STAT40:
cmd_set4828STAT40:
delete_hits40STAT40:
incr_hits0STAT40:
decr_hits0STAT40:
cas_hits0STAT40:
cas_badval0STATactive_slabs40STATtotal_malloced4294496616END名称描述chunk_sizechunk大小,bytechunks_per_page每个page的chunk数量total_pagespage数量total_chunkschunk数量*page数量get_hitsget命中数cmd_setset数delete_hitsdelete命中数incr_hitsincr命中数decr_hitsdecr命中数cas_hitscas命中数cas_badvalcas数据类型错误数used_chunks已被分配的chunk数free_chunks剩余chunk数free_chunks_end分完page浪费chunk数mem_requested请求存储的字节数active_slabsslab数量total_malloced总内存数量区块数量命中率分析占用情况被浪费内存数=(total_chunks*chunk_size)-mem_requested如果太大,需要调整factor其他命令其他命令versionversion
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Memcached 入门 精通 张振华 Jack
![提示](https://static.bingdoc.com/images/bang_tan.gif)