Memcache¼¼Êõ·ÖÏí£º½éÉÜ¡¢Ê¹Óᢴ洢¡¢Ëã·¨¡¢ÓÅ»¯¡¢ÃüÖÐÂÊ
1¡¢memcached ½éÉÜ
1.1 memcached ÊÇʲô£¿
memcached ÊÇÒÔLiveJournalÆìÏÂDanga Interactive ¹«Ë¾µÄBrad Fitzpatric ΪÊ׿ª·¢µÄÒ»¿îÈí¼þ¡£ÏÖÔÚÒѳÉΪmixi¡¢hatena¡¢Facebook¡¢Vox¡¢LiveJournal µÈÖÚ¶à·þÎñÖÐÌá¸ßWeb
Ó¦ÓÃÀ©Õ¹ÐÔµÄÖØÒªÒòËØ¡£Ðí¶àWeb Ó¦Óö¼½«Êý¾Ý±£´æµ½RDBMS ÖУ¬Ó¦Ó÷þÎñÆ÷´ÓÖжÁÈ¡Êý¾Ý²¢ÔÚä¯ÀÀÆ÷ÖÐÏÔʾ¡£µ«Ëæ×ÅÊý¾ÝÁ¿µÄÔö´ó¡¢·ÃÎʵļ¯ÖУ¬¾Í»á³öÏÖRDBMS µÄ¸ºµ£¼ÓÖØ¡¢Êý¾Ý¿âÏìÓ¦¶ñ»¯¡¢ÍøÕ¾ÏÔʾÑÓ³ÙµÈÖØ´óÓ°Ïì¡£Õâʱ¾Í¸Ãmemcached ´óÏÔÉíÊÖÁË¡£memcached ÊǸßÐÔÄܵķֲ¼Ê½Äڴ滺´æ·þÎñÆ÷¡£Ò»°ãµÄʹÓÃÄ¿µÄÊÇ£¬Í¨¹ý»º´æÊý¾Ý¿â²éѯ½á¹û£¬¼õÉÙÊý¾Ý¿â·ÃÎÊ´ÎÊý£¬ÒÔÌá¸ß¶¯Ì¬Web Ó¦ÓõÄËٶȡ¢Ìá¸ß¿ÉÀ©Õ¹ÐÔ¡£
ÄÚÖÃÄÚ´æ´æ´¢·½Ê½
Ñо¿memcachedÕâ¸ö²úÆ·£¬Ê×ÏÈ´ÓËüµÄÄÚ´æÄ£ÐÍ¿ªÊ¼£ºÎÒÃÇÖªµÀc++Àï·ÖÅäÄÚ´æÓÐÁ½ÖÖ·½Ê½£¬Ô¤ÏÈ·ÖÅäºÍ¶¯Ì¬·ÖÅ䣬ÏÔÈ»£¬Ô¤ÏÈ·ÖÅäÄÚ´æ»áʹ³ÌÐò±È½Ï¿ì£¬µ«ÊÇËüµÄȱµãÊDz»ÄÜÓÐЧÀûÓÃÄڴ棬¶ø¶¯Ì¬·ÖÅä¿ÉÒÔÓÐЧÀûÓÃÄڴ棬µ«ÊÇ»áʹ³ÌÐòÔËÐÐЧÂÊϽµ£¬memcachedµÄÄÚ´æ·ÖÅä¾ÍÊÇ»ùÓÚÒÔÉÏÔÀí£¬ÏÔȻΪÁË»ñµÃ¸ü¿ìµÄËٶȣ¬ÓÐʱºòÎÒÃDz»µÃ²»ÒԿռ任ʱ¼ä¡£
MemcachedµÄ¸ßÐÔÄÜÔ´ÓÚÁ½½×¶Î¹þÏ££¨two-stage hash£©½á¹¹¡£Memcached¾ÍÏñÒ»¸ö¾Þ´óµÄ¡¢´æ´¢Á˺ܶà<key,value>¶ÔµÄ¹þÏ£±í¡£Í¨¹ýkey£¬¿ÉÒÔ´æ´¢»ò²éѯÈÎÒâµÄÊý¾Ý¡£ ¿Í»§¶Ë
¿ÉÒÔ°ÑÊý¾Ý´æ´¢ÔÚ¶ą̀memcachedÉÏ¡£µ±²éѯÊý¾Ýʱ£¬¿Í»§¶ËÊ×ÏȲο¼½ÚµãÁбí¼ÆËã³ökeyµÄ¹þÏ£Öµ£¨½×¶ÎÒ»¹þÏ££©£¬½ø¶øÑ¡ÖÐÒ»¸ö½Úµã£»¿Í»§¶Ë½«ÇëÇó·¢Ë͸øÑ¡ÖеĽڵ㣬Ȼºó
memcached½Úµãͨ¹ýÒ»¸öÄÚ²¿µÄ¹þÏ£Ëã·¨£¨½×¶Î¶þ¹þÏ££©£¬²éÕÒÕæÕýµÄÊý¾Ý£¨item£©²¢·µ»Ø¸ø¿Í»§¶Ë¡£´ÓʵÏֵĽǶȿ´£¬memcachedÊÇÒ»¸ö·Ç×èÈûµÄ¡¢»ùÓÚʼþµÄ·þÎñÆ÷³ÌÐò¡£
ΪÁËÌá¸ßÐÔÄÜ£¬memcached Öб£´æµÄÊý¾Ý¶¼´æ´¢ÔÚmemcached ÄÚÖõÄÄÚ´æ´æ´¢¿Õ¼äÖС£ÓÉÓÚÊý¾Ý½ö´æÔÚÓÚÄÚ´æÖУ¬Òò´ËÖØÆômemcached¡¢ÖØÆô²Ù×÷ϵͳ»áµ¼ÖÂÈ«²¿Êý¾ÝÏûʧ¡£ÁíÍ⣬ÄÚÈÝÈÝÁ¿´ïµ½Ö¸¶¨ÖµÖ®ºó£¬¾Í»ùÓÚLRU(Least Recently Used)Ëã·¨×Ô¶¯É¾³ý²»Ê¹ÓõĻº´æ¡£memcached ±¾ÉíÊÇΪ»º´æ¶øÉè¼ÆµÄ·þÎñÆ÷£¬Òò´Ë²¢Ã»Óйý¶à¿¼ÂÇÊý¾ÝµÄÓÀ¾ÃÐÔÎÊÌâ
memcached ²»»¥ÏàͨÐŵķֲ¼Ê½
memcached ¾¡¹ÜÊÇ¡°·Ö²¼Ê½¡±»º´æ·þÎñÆ÷£¬µ«·þÎñÆ÷¶Ë²¢Ã»Óзֲ¼Ê½¹¦ÄÜ¡£¸÷¸ö
memcached ²»»á»¥ÏàͨÐÅÒÔ¹²ÏíÐÅÏ¢¡£ÄÇô£¬ÔõÑù½øÐзֲ¼Ê½ÄØ£¿ÕâÍêÈ«È¡¾öÓÚ¿Í»§¶ËµÄʵÏÖ¡£
2.2 memcached Æô¶¯
memcached Æô¶¯µÄÃüÁîÔÚ°²×°Ä¿Â¼µÄbin ¶þ¼¶Ä¿Â¼Ï£¬Èç/home/test/app/memcahced-1.4.2/bin/memcached -p 11222 -m 128¨Cd
³£ÓõÄһЩÆô¶¯Ñ¡Ïî½éÉÜÑ¡Ïî˵Ã÷
-p ÕìÌýµÄ¶Ë¿Ú£¬Ä¬ÈÏΪ11211
-m ʹÓÃÄÚ´æ´óС£¬Ä¬ÈϵÄ64m
-d ×÷Ϊdaemon ÔÚºǫ́Æô¶¯
-vv ÓÃvery vrebose ģʽÆô¶¯£¬µ÷ÊÔÐÅÏ¢ºÍ´íÎóÊä³öµ½¿ØÖÆ̨
-l ÕìÌýµÄµØÖ·£¬Ä¬ÈÏΪËùÓпÉÒÔ·ÃÎʵĵØÖ·
-M ÓÃÓÚÔÚÄÚ´æÒç³öµÄʱºò£¬·µ»ØÒ»¸ö´íÎ󣬽ûÖ¹×Ô¶¯µÄÒƳöÊý
¾Ý£¬Ìæ´úµÄÊÇ·µ»ØÒ»¸öerror
-P Pid Îļþ´æÔڵķ¾¶£¬½öÏÞ¼ÓÉÏ-d ²ÎÊýÊÇÓÃ
-c ×î´óͬʱµÄÁ¬½ÓÊý£¬Ä¬ÈÏΪ1024
ÆäËüµÄһЩѡÏ¿ÉÒÔͨ¹ý¨Ch ÃüÁîÀ´½øÐв鿴
2.3ÃüÁîÐзÃÎÊmemcached
ÏÂÃæ¼ÙÉèmemcached Æô¶¯Ê±µÄ-p ²ÎÊýΪ11311£¬ÃüÁî²Ù×÷ÔÚÆô¶¯memcached
±¾»úÊ×ÏÈtelnet Á¬½Óµ½memcached ·þÎñÆ÷
telnet 127.0.0.1 11311
telnet ³É¹¦Ö®ºó£¬´ó¸Å»áÏÔʾÏÂÃæµÄÐÅÏ¢
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
¸÷ÖÖ״̬£¨stats£©
STAT <name> <value>\r\n
È磺statsÃüÁÔò·µ»ØÒÔÏÂÐÅÏ¢£º
stats
STAT pid 26804
STAT uptime 182783
STAT time 1404973716
STAT version 1.4.13
STAT libevent 2.0.11-stable
STAT pointer_size 64
STAT rusage_user 2.320647
STAT rusage_system 5.411177
STAT curr_connections 34
STAT total_connections 558
STAT connection_structures 37
STAT reserved_fds 20
STAT cmd_get 127292
STAT cmd_set 60056
STAT cmd_flush 145
STAT cmd_touch 0
STAT get_hits 83811
STAT get_misses 43481
STAT delete_misses 15970
STAT delete_hits 11992
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 14300156
STAT bytes_written 11507140
STAT limit_maxbytes 134217728 # ·ÖÅä¸ømemcacheµÄÄÚ´æ´óС£¨×Ö½Ú£©
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT expired_unfetched 16884
STAT evicted_unfetched 0
STAT bytes 609350 # µ±Ç°·þÎñÆ÷´æ´¢itemsÕ¼ÓõÄ×Ö½ÚÊý
STAT curr_items 4668 # ·þÎñÆ÷µ±Ç°´æ´¢µÄitemsÊýÁ¿
STAT total_items 60056
STAT evictions 0 # ·ÖÅä¸ømemcacheµÄ¿Õ¼äÓÃÂúºóÐèҪɾ³ý¾ÉµÄitemsÊý£¬Ìß³ö¡£
STAT reclaimed 27160 #»ØÊÕÔÙÀûÓã¬ÒѹýÆÚµÄÊý¾ÝÌõÄ¿À´´æ´¢ÐÂÊý¾Ý¡£
END
´æ´¢ÃüÁset ,add ,replace£©
¿Í»§¶Ë»á·¢ËÍÒ»ÐÐÏñÕâÑùµÄÃüÁ
<command name> <key> <flags> <exptime> <bytes>\r\n
È磺
set key1 0 600 5\r\nvalue\r\n
add key2 0 500 2\r\n
replace key1 0 600 6\r\nvalue1\r\n
ÏêϸµÄÃüÁî˵Ã÷£¬¿ÉÒÔ¼û¸½Â¼µÄmemcached ÖÐÓ¢ÎÄÐÒéÄÚÈÝ
¶ÁÈ¡ÃüÁget£©
ÃüÁîÈçÏ£ºget <key>*\r\n
- <key>* ±íʾһ¸ö»ò¶à¸ö¼üÖµ£¬ÓÉ¿Õ¸ñ¸ô¿ªµÄ×Ö´®
È磺
get key1
VALUE key1 0 7
value12
ɾ³ýÃüÁdelete£©
ÃüÁîÈ磺delete <key> <time>\r\n
<key> ÊÇ¿Í»§¶ËÏ£Íû·þÎñÆ÷ɾ³ýµÄÄÚÈݵļüÃû
- <time> ÊÇÒ»¸öµ¥Î»ÎªÃëµÄʱ¼ä£¨»ò´ú±íÖ±µ½Ä³Ò»¿ÌµÄUnixʱ¼ä£©£¬ÔÚ¸Ãʱ¼äÄÚ·þÎñÆ÷»á¾Ü¾ø¶ÔÓڴ˼üÃûµÄ¡°add¡±ºÍ¡°replace¡±ÃüÁî¡£´ËʱÄÚÈݱ»·ÅÈëdelete¶ÓÁУ¬ÎÞ·¨ÔÙͨ¹ý¡°get¡±µÃµ½¸ÃÄÚÈÝ£¬Ò²ÎÞ·¨ÊÇÓá°add¡±ºÍ¡°replace¡±ÃüÁµ«ÊÇ¡°set¡±ÃüÁî¿ÉÓã©¡£Ö±µ½Ö¸¶¨Ê±¼ä£¬ÕâЩÄÚÈݱ»×îÖÕ´Ó·þÎñÆ÷µÄÄÚ´æÖг¹µ×Çå³ý
<time>²ÎÊýÊÇ¿ÉÑ¡µÄ£¬È±Ê¡Îª0£¨±íʾÄÚÈÝ»áÁ¢¿ÌÇå³ý£¬²¢ÇÒËæºóµÄ´æ´¢ÃüÁî¾ù¿ÉÓÃ
È磺delete key1
Í˳öÃüÁî(quit)
È磺quit
4¡¢Àí½âmemcached µÄÄÚ´æ´æ´¢
MemcacheÄÚ´æ·ÖÅä»úÖÆ
MemcacheʹÓÃÁËSlab AllocatorµÄÄÚ´æ·ÖÅä»úÖÆ:°´ÕÕÔ¤Ïȹ涨µÄ´óС£¬½«·ÖÅäµÄÄÚ´æ·Ö¸î³ÉÌض¨³¤¶ÈµÄ¿é£¬ÒÔÍêÈ«½â¾öÄÚ´æËéƬÎÊÌâ
MemcacheµÄ´æ´¢Éæ¼°µ½slab£¬page£¬chunkÈý¸ö¸ÅÄî
1£®ChunkΪ¹Ì¶¨´óСµÄÄÚ´æ¿Õ¼ä£¬Ä¬ÈÏΪ96Byte¡£
2£®page¶ÔӦʵ¼ÊµÄÎïÀí¿Õ¼ä£¬1¸öpageΪ1M¡£
3£®Í¬Ñù´óСµÄchunkÓÖ³ÆΪslab¡£
4.1Slab Allocation »úÖÆ£ºÕûÀíÄÚ´æÒÔ±ãÖظ´Ê¹ÓÃ
×î½üµÄmemcached ĬÈÏÇé¿öϲÉÓÃÁËÃûΪSlab Allocator µÄ»úÖÆ·ÖÅä¡¢¹ÜÀíÄÚ´æ¡£ÔڸûúÖƳöÏÖÒÔÇ°£¬ÄÚ´æµÄ·ÖÅäÊÇͨ¹ý¶ÔËùÓмǼ¼òµ¥µØ½øÐÐmallocºÍfree À´½øÐеġ£µ«ÊÇ£¬ÕâÖÖ·½Ê½»áµ¼ÖÂÄÚ´æËéƬ£¬¼ÓÖزÙ×÷ϵͳÄÚ´æ¹ÜÀíÆ÷µÄ¸ºµ££¬×µÄÇé¿öÏ£¬»áµ¼Ö²Ù×÷ϵͳ±Èmemcached ½ø³Ì±¾Éí»¹Âý¡£Slab Allocator ¾ÍÊÇΪ½â¾ö¸ÃÎÊÌâ¶øµ®ÉúµÄ
Slab Allocation µÄÔÀíÏ൱¼òµ¥¡£½«·ÖÅäµÄÄÚ´æ·Ö¸î³É¸÷ÖֳߴçµÄ¿é
£¨chunk£©£¬²¢°Ñ³ß´çÏàͬµÄ¿é·Ö³É×飨chunk µÄ¼¯ºÏ£©
¶øÇÒ£¬slab allocator »¹ÓÐÖظ´Ê¹ÓÃÒÑ·ÖÅäµÄÄÚ´æµÄÄ¿µÄ¡£Ò²¾ÍÊÇ˵£¬·ÖÅäµ½µÄÄÚ´æ²»»áÊÍ·Å£¬¶øÊÇÖظ´ÀûÓá£
Slab Allocation µÄÖ÷ÒªÊõÓï
Page
·ÖÅä¸øSlab µÄÄÚ´æ¿Õ¼ä£¬Ä¬ÈÏÊÇ1MB¡£·ÖÅä¸øSlab Ö®ºó¸ù¾Ýslab µÄ´óСÇзֳÉchunk¡£
Chunk
ÓÃÓÚ»º´æ¼Ç¼µÄÄÚ´æ¿Õ¼ä¡£
Slab Class
Ìض¨´óСµÄchunk µÄ×é
4.2 ÔÚSlabÖлº´æ¼Ç¼µÄÔÀí
memcached ¸ù¾ÝÊÕµ½µÄÊý¾ÝµÄ´óС£¬Ñ¡Ôñ×îÊʺÏÊý¾Ý´óСµÄslab£¬memcached Öб£´æ×Åslab ÄÚ¿ÕÏÐchunk µÄÁÐ±í£¬¸ù¾Ý¸ÃÁбíÑ¡Ôñchunk£¬È»
ºó½«Êý¾Ý»º´æÓÚÆäÖÐ
4.3 Slab Allocator µÄȱµã
ÓÉÓÚ·ÖÅäµÄÊÇÌض¨³¤¶ÈµÄÄڴ棬Òò´ËÎÞ·¨ÓÐЧÀûÓ÷ÖÅäµÄÄÚ´æ¡£ÀýÈ磬½«100 ×Ö½ÚµÄÊý¾Ý»º´æµ½128 ×Ö½ÚµÄchunk ÖУ¬Ê£ÓàµÄ28×Ö½Ú¾ÍÀË·ÑÁË
¶ÔÓÚ¸ÃÎÊÌâÄ¿Ç°»¹Ã»ÓÐÍêÃÀµÄ½â¾ö·½°¸£¬µ«ÔÚÎĵµÖмÇÔØÁ˱ȽÏÓÐЧµÄ½â¾ö·½°¸¡£¾ÍÊÇ˵£¬Èç¹ûÔ¤ÏÈÖªµÀ¿Í»§¶Ë·¢Ë͵ÄÊý¾ÝµÄ¹«ÓôóС£¬»òÕß½ö»º´æ´óСÏàͬµÄÊý¾ÝµÄÇé¿öÏ£¬Ö»ÒªÊ¹ÓÃÊʺÏÊý¾Ý´óСµÄ×éµÄÁÐ±í£¬¾Í¿ÉÒÔ¼õÉÙÀË·Ñ¡£µ«ÊǺÜÒź¶£¬ÏÖÔÚ»¹²»ÄܽøÐÐÈκε÷ÓÅ£¬Ö»ÄÜÆÚ´ýÒÔºóµÄ°æ±¾ÁË¡£µ«ÊÇ£¬ÎÒÃÇ¿ÉÒÔµ÷½Úslab class µÄ´óСµÄ²î±ð¡£½ÓÏÂÀ´ËµÃ÷growth factor Ñ¡Ïî¡£
4.4 ʹÓÃGrowth Factor½øÐе÷ÓÅ
memcached ÔÚÆô¶¯Ê±Ö¸¶¨Growth Factor Òò×Ó£¨Í¨¹ýf Ñ¡Ï£¬¾Í¿ÉÒÔÔÚijÖ̶ֳÈÉÏ¿ØÖÆslab Ö®¼äµÄ²îÒ졣ĬÈÏֵΪ1.25¡£µ«ÊÇ£¬ÔÚ¸ÃÑ¡Ïî³öÏÖ֮ǰ£¬Õâ¸öÒò×ÓÔø¾¹Ì¶¨Îª2£¬³ÆΪ¡°powers of 2¡±²ßÂÔ¡£
ÏÂÃæÊÇÆô¶¯ºóµÄverbose Êä³ö£º
slab class 1: chunk size 128 perslab 8192
slab class 2: chunk size 256 perslab 4096
slab class 3: chunk size 512 perslab 2048
slab class 4: chunk size 1024 perslab 1024
slab class 5: chunk size 2048 perslab 512
slab class 6: chunk size 4096 perslab 256
slab class 7: chunk size 8192 perslab 128
slab class 8: chunk size 16384 perslab 64
slab class 9: chunk size 32768 perslab 32
slab class 10: chunk size 65536 perslab 16
slab class 11: chunk size 131072 perslab 8
slab class 12: chunk size 262144 perslab 4
slab class 13: chunk size 524288 perslab 2
¿É¼û£¬´Ó128 ×Ö½ÚµÄ×鿪ʼ£¬×éµÄ´óСÒÀ´ÎÔö´óΪÔÀ´µÄ2 ±¶¡£ÕâÑùÉèÖõÄÎÊÌâÊÇ£¬slab Ö®¼äµÄ²î±ð±È½Ï´ó£¬ÓÐЩÇé¿öϾÍÏ൱ÀË·ÑÄÚ´æ¡£Òò´Ë£¬Îª¾¡Á¿¼õÉÙÄÚ´æÀË·Ñ£¬Á½ÄêÇ°×·¼ÓÁËgrowth factor Õâ¸öÑ¡ÏîÀ´¿´¿´ÏÖÔÚµÄĬÈÏÉèÖã¨f=1.25£©Ê±µÄÊä³ö£¨Æª·ùËùÏÞ£¬ÕâÀïֻдµ½µÚ10 ×飩£º
slab class 1: chunk size 88 perslab 11915
slab class 2: chunk size 112 perslab 9362
slab class 3: chunk size 144 perslab 7281
slab class 4: chunk size 184 perslab 5698
slab class 5: chunk size 232 perslab 4519
slab class 6: chunk size 296 perslab 3542
slab class 7: chunk size 376 perslab 2788
slab class 8: chunk size 472 perslab 2221
slab class 9: chunk size 592 perslab 1771
slab class 10: chunk size 744 perslab 1409
¿É¼û£¬×é¼ä²î¾à±ÈÒò×ÓΪ2 ʱСµÃ¶à£¬¸üÊʺϻº´æ¼¸°Ù×ֽڵļǼ¡£´ÓÉÏÃæµÄÊä³ö½á¹ûÀ´¿´£¬¿ÉÄÜ»á¾õµÃÓÐЩ¼ÆËãÎó²î£¬ÕâЩÎó²îÊÇΪÁ˱£³Ö×Ö½ÚÊýµÄ¶ÔÆë¶ø¹ÊÒâÉèÖõġ£½«memcached ÒýÈë²úÆ·£¬»òÊÇÖ±½ÓʹÓÃĬÈÏÖµ½øÐв¿Êðʱ£¬×îºÃÊÇÖØмÆËãÒ»ÏÂÊý¾ÝµÄÔ¤ÆÚƽ¾ù³¤¶È£¬µ÷Õûgrowth factor£¬ÒÔ»ñµÃ×îÇ¡µ±µÄÉèÖá£ÄÚ´æÊÇÕä¹óµÄ×ÊÔ´£¬À˷ѾÍÌ«¿ÉϧÁË¡£
itemÕ¼Óÿռä¼ÆËã
*nsuffix = (uint8_t) snprintf(suffix, 40, " %d %d\r\n", flags, nbytes ¨C 2); return sizeof(item) + nkey + *nsuffix + nbytes;
*nsuffix=" %d %d\\r\\n¡±µÄ³¤¶È<br />
Èç¹ûITEM_CAS±êÖ¾ÉèÖÃʱ£¬ÕâÀïÓÐ8×Ö½ÚµÄÊý¾Ý<br />
ÍêÕûµÄitem³¤¶ÈÊǼü³¤£«Öµ³¤£«ºó׺³¤£«item½á¹¹´óС£¨48×Ö½Ú£© + 8<br />
item.length=56+key.lenght+value.length+ºó׺³¤<br />
32λ»úÆ÷ item½á¹¹ÊÇ32×Ö½Ú<br />
64λ»úÆ÷ itme½á¹¹ÊÇ48×Ö½Ú<br />
memcache´æ´¢µÄʱºò¶ÔkeyµÄ³¤¶ÈÓÐÏÞÖÆ£¬phpºÍCµÄ×î´ó³¤¶È¶¼ÊÇ250</p>
<p align="left" style="margin-top:0px;padding:0px;border:0px;font-size:14px;text-align:justify;word-wrap:break-word;word-break:break-all;text-indent:2em;color:#444444;font-family:'Microsoft YaHei', ΢ÈíÑźÚ, Helvetica, Arial, 'Lucida Grande', Tahoma, sans-serif;line-height:22.4px;">5¡¢memcached ɾ³ý»úÖÆ
memcached ÊÇ»º´æ£¬²»ÐèÒªÓÀ¾ÃµÄ±£´æµ½·þÎñÆ÷ÉÏ£¬±¾Õ½éÉÜmemcache µÄɾ³ý»úÖÆ
5.1 memcached ÔÚÊý¾Ýɾ³ý·½ÃæÓÐЧµÄÀûÓÃ×ÊÔ´
Memcached ²»»áÊÍ·ÅÒѾ·ÖÅäµÄÄڴ棬¼Ç¼¹ýÆÚÖ®ºó£¬¿Í»§¶ËÎÞ·¨ÔÙ¿´µ½ÕâÒ»Ìõ¼Ç¼£¬Æä´æ´¢¿Õ¼ä¾Í¿ÉÒÔÀûÓá£
Lazy Expiration
memcached ÄÚ²¿²»»á¼àÊӼǼÊÇ·ñ¹ýÆÚ£¬¶øÊÇÔÚget ʱ²é¿´¼Ç¼µÄʱ¼ä´Á£¬¼ì²é¼Ç¼ÊÇ·ñ¹ýÆÚ¡£ÕâÖÖ¼¼Êõ±»³ÆΪlazy£¨¶èÐÔ£©expiration¡£Òò´Ë£¬memcached²»»áÔÚ¹ýÆÚ¼àÊÓÉϺķÑCPU ʱ¼ä
5.2 LRU£º´Ó»º´æÖÐÓÐЧɾ³ýÊý¾ÝµÄÔÀí
1.search->refcount == 0 && ÒѾ¹ýÆÚµÄ É¾³ý
2.tries = 50; // ×î¶à³¢ÊÔ50´Î LRU¶ÓÁÐtail ²éÕÒ search->refcount == 0 µÚÒ»¸ö ɾ³ý
3. tries = 50; // ×î¶à³¢ÊÔ50´Î LRU¶ÓÁÐtail ²éÕÒsearch->refcount != 0 ²éѯʱ¼ä(³¬¹ý3Сʱ)µÄitem µÚÒ»¸ö ɾ³ý
memcached »áÓÅÏÈʹÓÃÒѳ¬Ê±µÄ¼Ç¼µÄ¿Õ¼ä£¬µ«¼´Ê¹Èç´Ë£¬Ò²»á·¢Éú×·¼ÓмǼʱ¿Õ¼ä²»×ãµÄÇé¿ö£¬´Ëʱ¾ÍҪʹÓÃÃûΪLeast Recently Used£¨LRU£©»úÖÆÀ´·ÖÅä¿Õ¼ä¡£¹ËÃû˼Ò壬ÕâÊÇɾ³ý¡°×î½ü×îÉÙʹÓᱵļǼµÄ»úÖÆ¡£Òò´Ë£¬µ±memcached µÄÄÚ´æ¿Õ¼ä²»×ãʱ£¨ÎÞ·¨´Óslab class »ñÈ¡µ½ÐµĿռäʱ£©£¬¾Í´Ó×î½üδ±»Ê¹ÓõļǼÖÐËÑË÷£¬²¢½«Æä¿Õ¼ä·ÖÅä¸øеļǼ¡£´Ó»º´æµÄʵÓýǶÈÀ´¿´£¬¸ÃÄ£ÐÍÊ®·ÖÀíÏë¡£²»¹ý£¬ÓÐЩÇé¿öÏÂLRU »úÖÆ·´µ¹»áÔì³ÉÂé·³¡£memcached Æô¶¯Ê±Í¨¹ý¡°M¡±²ÎÊý¿ÉÒÔ½ûÖ¹LRU£¬ÈçÏÂËùʾ£º
$ memcached -M ¨Cm 1024
Æô¶¯Ê±±ØÐë×¢ÒâµÄÊÇ£¬Ð¡Ð´µÄ¡°m¡±Ñ¡ÏîÊÇÓÃÀ´Ö¸¶¨×î´óÄÚ´æ´óСµÄ¡£²»Ö¸¶¨¾ßÌåÊýÖµÔòʹÓÃĬÈÏÖµ64MB¡£
Ö¸¶¨¡°M¡±²ÎÊýÆô¶¯ºó£¬ÄÚ´æÓþ¡Ê±memcached »á·µ»Ø´íÎó¡£»°Ëµ»ØÀ´£¬memcached ±Ï¾¹²»ÊÇ´æ´¢Æ÷£¬¶øÊÇ»º´æ£¬ËùÒÔÍƼöʹÓÃLRU
6¡¢memcached µÄ·Ö²¼Ê½Ëã·¨
6.1memcached µÄ·Ö²¼Ê½
memcached ËäÈ»³ÆΪ¡°·Ö²¼Ê½¡±»º´æ·þÎñÆ÷£¬µ«·þÎñÆ÷¶Ë²¢Ã»ÓС°·Ö²¼Ê½¡±¹¦ÄÜ¡£memcached µÄ·Ö²¼Ê½£¬ÔòÊÇÍêÈ«ÓÉ¿Í»§¶Ë³ÌÐò¿âʵÏֵġ£ÕâÖÖ·Ö²¼Ê½ÊÇmemcached µÄ×î´óÌصã
memcached µÄ·Ö²¼Ê½ÊÇʲôÒâ˼£¿
ÏÂÃæ¼ÙÉèmemcached ·þÎñÆ÷ÓÐnode1¡«node3 Èý̨£¬Ó¦ÓóÌÐòÒª±£´æ¼üÃûΪ¡°tokyo¡±¡¢¡°kanagawa¡±¡¢¡°chiba¡±¡¢¡°saitama¡±¡¢¡°gunma¡±µÄÊý¾Ý
Ê×ÏÈÏòmemcached ÖÐÌí¼Ó¡°tokyo¡±¡£½«¡°tokyo¡±´«¸ø¿Í»§¶Ë³ÌÐò¿âºó£¬¿Í»§¶ËʵÏÖµÄËã·¨¾Í»á¸ù¾Ý¡°¼ü¡±À´¾ö¶¨±£´æÊý¾ÝµÄmemcached ·þÎñÆ÷¡£·þÎñÆ÷Ñ¡¶¨ºó£¬¼´ÃüÁîËü±£´æ¡°tokyo¡±¼°ÆäÖµ
ͬÑù£¬¡°kanagawa¡±¡¢¡°chiba¡±¡¢¡°saitama¡±¡¢¡°gunma¡±¶¼ÊÇÏÈÑ¡Ôñ·þÎñÆ÷ÔÙ±£½ÓÏÂÀ´»ñÈ¡±£´æµÄÊý¾Ý¡£»ñȡʱҲҪ½«Òª»ñÈ¡µÄ¼ü¡°tokyo¡±´«µÝ¸øº¯Êý¿â¡£º¯Êý¿âͨ¹ýÓëÊý¾Ý±£´æʱÏàͬµÄËã·¨£¬¸ù¾Ý¡°¼ü¡±Ñ¡Ôñ·þÎñÆ÷¡£Ê¹ÓõÄËã·¨Ïàͬ£¬¾ÍÄÜÑ¡ÖÐÓë±£´æʱÏàͬµÄ·þÎñÆ÷£¬È»ºó·¢ËÍget ÃüÁî¡£Ö»ÒªÊý¾ÝûÓÐÒòΪijЩÔÒò±»É¾³ý£¬¾ÍÄÜ»ñµÃ±£´æµÄÖµ¡£
ÕâÑù£¬½«²»Í¬µÄ¼ü±£´æµ½²»Í¬µÄ·þÎñÆ÷ÉÏ£¬¾ÍʵÏÖÁËmemcached µÄ·Ö²¼Ê½¡£memcached ·þÎñÆ÷Ôö¶àºó£¬¼ü¾Í»á·ÖÉ¢£¬¼´Ê¹Ò»Ì¨memcached ·þÎñÆ÷·¢Éú¹ÊÕÏÎÞ·¨Á¬½Ó£¬Ò²²»»áÓ°ÏìÆäËûµÄ»º´æ£¬ÏµÍ³ÒÀÈ»ÄܼÌÐøÔËÐÐ
6.2 ÓàÊý·Ö²¼Ê½Ëã·¨
¾ÍÊÇ¡°¸ù¾Ý·þÎñÆ÷̨ÊýµÄÓàÊý½øÐзÖÉ¢¡±¡£ÇóµÃ¼üµÄÕûÊý¹þÏ£Öµ£¬ÔÙ³ýÒÔ·þÎñÆ÷̨Êý£¬¸ù¾ÝÆäÓàÊýÀ´Ñ¡Ôñ·þÎñÆ÷
ÓàÊýËã·¨µÄȱµã
ÓàÊý¼ÆËãµÄ·½·¨¼òµ¥£¬Êý¾ÝµÄ·ÖÉ¢ÐÔÒ²Ï൱ÓÅÐ㣬µ«Ò²ÓÐÆäȱµã¡£ÄǾÍÊǵ±Ìí¼Ó»òÒƳý·þÎñÆ÷ʱ£¬»º´æÖØ×éµÄ´ú¼ÛÏ൱¾Þ´ó¡£Ìí¼Ó·þÎñÆ÷ºó£¬ÓàÊý¾Í»á²úÉú¾Þ±ä£¬ÕâÑù¾ÍÎÞ·¨»ñÈ¡Óë±£´æʱÏàͬµÄ·þÎñÆ÷£¬´Ó¶øÓ°Ï컺´æµÄÃüÖС£
6.3Consistent Hashing£¨Ò»Ö¹þÏ££©
֪ʶ²¹³ä£º¹þÏ£Ëã·¨£¬¼´É¢Áк¯Êý¡£½«ÈÎÒⳤ¶ÈµÄ¶þ½øÖÆÖµÓ³ÉäΪ½Ï¶ÌµÄ¹Ì¶¨³¤¶ÈµÄ¶þ½øÖÆÖµ£¬Õâ¸öСµÄ¶þ½øÖÆÖµ³ÆΪ¹þÏ£Öµ¡£¹þÏ£ÖµÊÇÒ»¶ÎÊý¾ÝΨһÇÒ¼«Æä½ô´ÕµÄÊýÖµ±íʾÐÎʽ¡£Èç¹ûÉ¢ÁÐÒ»¶ÎÃ÷ÎĶøÇÒÄÄÅÂÖ»¸ü¸Ä¸Ã¶ÎÂäµÄÒ»¸ö×Öĸ£¬ËæºóµÄ¹þÏ£¶¼½«²úÉú²»Í¬µÄÖµ¡£ÒªÕÒµ½É¢ÁÐΪͬһ¸öÖµµÄÁ½¸ö²»Í¬µÄÊäÈ룬ÔÚ¼ÆËãÉÏÊDz»¿ÉÄܵģ¬ËùÒÔÊý¾ÝµÄ¹þÏ£Öµ¿ÉÒÔ¼ìÑéÊý¾ÝµÄÍêÕûÐÔ¡£Ò»°ãÓÃÓÚ¿ìËÙ²éÕҺͼÓÃÜËã·¨¡££¨³£¼ûµÄÓÐMD5£¬SHA-1£©
Consistent Hashing µÄ¼òµ¥ËµÃ÷
Consistent Hashing ÈçÏÂËùʾ£ºÊ×ÏÈÇó³ömemcached ·þÎñÆ÷£¨½Úµã£©µÄ¹þÏ£Öµ£¬²¢½«ÆäÅäÖõ½0¡«232 µÄÔ²£¨continuum£©ÉÏ¡£È»ºóÓÃͬÑùµÄ·½·¨Çó³ö´æ´¢Êý¾ÝµÄ¼üµÄ¹þÏ£Öµ£¬²¢Ó³Éäµ½Ô²ÉÏ¡£È»ºó´ÓÊý¾ÝÓ³Éäµ½µÄλÖÿªÊ¼Ë³Ê±Õë²éÕÒ£¬½«Êý¾Ý±£´æµ½ÕÒµ½µÄµÚÒ»¸ö·þÎñÆ÷ÉÏ¡£Èç¹û³¬¹ý232 ÈÔÈ»ÕÒ²»µ½·þÎñÆ÷£¬¾Í»á±£´æµ½µÚһ̨memcached ·þÎñÆ÷ÉÏ¡£
´ÓÉÏͼµÄ״̬ÖÐÌí¼Óһ̨memcached ·þÎñÆ÷¡£ÓàÊý·Ö²¼Ê½Ëã·¨ÓÉÓÚ±£´æ¼üµÄ·þÎñÆ÷»á·¢Éú¾Þ´ó±ä»¯£¬¶øÓ°Ï컺´æµÄÃüÖÐÂÊ£¬µ«Consistent HashingÖУ¬Ö»ÓÐÔÚcontinuum ÉÏÔö¼Ó·þÎñÆ÷µÄµØµãÄæʱÕë·½ÏòµÄµÚһ̨·þÎñÆ÷Éϵļü»áÊܵ½Ó°Ïì
Consistent Hashing£ºÌí¼Ó·þÎñÆ÷
Òò´Ë£¬Consistent Hashing ×î´óÏ޶ȵØÒÖÖÆÁ˼üµÄÖØзֲ¼¡£¶øÇÒ£¬ÓеÄConsistent Hashing µÄʵÏÖ·½·¨»¹²ÉÓÃÁËÐéÄâ½ÚµãµÄ˼Ï롣ʹÓÃÒ»°ãµÄhashº¯ÊýµÄ»°£¬·þÎñÆ÷µÄÓ³ÉäµØµãµÄ·Ö²¼·Ç³£²»¾ùÔÈ¡£Òò´Ë£¬Ê¹ÓÃÐéÄâ½ÚµãµÄ˼Ï룬Ϊÿ¸öÎïÀí½Úµã£¨·þÎñÆ÷£©ÔÚcontinuumÉÏ·ÖÅä100¡«200 ¸öµã¡£ÕâÑù¾ÍÄÜÒÖÖÆ·Ö²¼²»¾ùÔÈ£¬×î´óÏ޶ȵؼõС·þÎñÆ÷Ôö¼õʱµÄ»º´æÖØзֲ¼¡£
ͨ¹ýÉÏÎÄÖнéÉܵÄʹÓÃConsistent Hashing Ëã·¨µÄmemcached ¿Í»§¶Ëº¯Êý¿â½øÐвâÊԵĽá¹ûÊÇ£¬ÓÉ·þÎñÆ÷̨Êý£¨n£©ºÍÔö¼ÓµÄ·þÎñÆ÷̨Êý£¨m£©¼ÆËãÔö¼Ó·þÎñÆ÷ºóµÄÃüÖÐÂʼÆË㹫ʽÈçÏ£º
(1 n/(n+m)) * 100
´æ´¢ÃüÁî
<command name> <key> <flags> <exptime> <bytes>\r\n
- <command name> ÊÇset, add,»òÕßrepalce
- <key> ÊǽÓÏÂÀ´µÄ¿Í»§¶ËËùÒªÇó´¢´æµÄÊý¾ÝµÄ¼üÖµ
- <flags> ÊÇÔÚÈ¡»ØÄÚÈÝʱ£¬ÓëÊý¾ÝºÍ·¢ËÍ¿éһͬ±£´æ·þÎñÆ÷ÉϵÄÈÎÒâ16λÎÞ·ûºÅÕûÐΣ¨ÓÃÊ®½øÖÆÀ´Êéд£©¡£¿Í»§¶Ë¿ÉÒÔÓÃËü×÷Ϊ¡°Î»Óò¡±À´´æ´¢Ò»Ð©Ìض¨µÄÐÅÏ¢£»Ëü¶Ô·þÎñÆ÷ÊDz»Í¸Ã÷µÄ¡£
- <exptime> ÊÇÖÕֹʱ¼ä¡£Èç¹ûΪ0£¬¸ÃÏîÓÀ²»¹ýÆÚ(ËäÈ»Ëü¿ÉÄܱ»É¾³ý£¬ÒÔ±ãΪÆäËû»º´æÏîÄ¿ÌÚ³öλÖÃ)¡£Èç¹û·Ç0£¨Unix ʱ¼ä´Á»òµ±Ç°Ê±¿ÌµÄÃëÆ«ÒÆ£©£¬µ½´ïÖÕֹʱ¼äºó£¬¿Í»§¶ËÎÞ·¨ÔÙ»ñµÃÕâÏîÄÚÈÝ¡£
- <bytes> ÊÇËæºóµÄÊý¾ÝÇø¿éµÄ×Ö½Ú³¤¶È£¬²»°üÀ¨ÓÃÓÚ·ÖÒ°µÄ¡°\r\n¡±¡£Ëü¿ÉÒÔÊÇ0£¨ÕâʱºóÃæ¸úËæÒ»¸ö¿ÕµÄÊý¾ÝÇø¿é£©¡£
- <data block> ÊÇ´ó¶ÎµÄ8λÊý¾Ý£¬Æ䳤¶ÈÓÉÇ°ÃæµÄÃüÁîÐÐÖеÄ<bytes>Ö¸¶¨¡£
• set Òâ˼ÊÇ¡°´¢´æ´ËÊý¾Ý¡±
• add Òâ˼ÊÇ¡°´¢´æ´ËÊý¾Ý£¬Ö»ÔÚ·þÎñÆ÷*δ*±£Áô´Ë¼üÖµµÄÊý¾Ýʱ¡±
• replace Òâ˼ÊÇ¡°´¢´æ´ËÊý¾Ý£¬Ö»ÔÚ·þÎñÆ÷*Ôø*±£Áô´Ë¼üÖµµÄÊý¾Ýʱ¡±
·¢ËÍÃüÁîÐкÍÊý¾ÝÇø¿éÒԺ󣬿ͻ§¶ËµÈ´ý»Ø¸´£¬¿ÉÄܵĻظ´ÈçÏ£º
- "STORED\r\n"±íÃ÷³É¹¦.
- "NOT_STORED\r\n"±íÃ÷Êý¾ÝûÓб»´æ´¢£¬µ«²»ÊÇÒòΪ·¢Éú´íÎó¡£Õâͨ³£Òâζ×Åadd»òreplace ÃüÁîµÄÌõ¼þ²»³ÉÁ¢£¬»òÕߣ¬ÏîÄ¿ÒѾλÁÐɾ³ý¶ÓÁУ¨²Î¿¼ºóÎĵġ°delete¡±ÃüÁ¡£
È¡»ØÃüÁî
get <key>*\r\n
- <key>* ±íʾһ¸ö»ò¶à¸ö¼üÖµ£¬ÓÉ¿Õ¸ñ¸ô¿ªµÄ×Ö´®ÕâÐÐÃüÁîÒԺ󣬿ͻ§¶ËµÄµÈ´ý0¸ö»ò¶à¸öÏîÄ¿£¬Ã¿Ï»áÊÕµ½Ò»ÐÐÎı¾£¬È»ºó¸ú×ÅÊý¾ÝÇø¿é¡£ËùÓÐÏîÄ¿´«ËÍÍê±Ïºó£¬·þÎñÆ÷·¢ËÍÒÔÏÂ×Ö´®£º"END\r\n"À´Ö¸Ê¾»ØÓ¦Íê±Ï,·þÎñÆ÷ÓÃÒÔÏÂÐÎʽ·¢ËÍÿÏîÄÚÈÝ£º
VALUE <key> <flags> <bytes>\r\n
<data block>\r\n
- <key> ÊÇËù·¢Ë͵ļüÃû
- <flags> ÊÇ´æ´¢ÃüÁîËùÉèÖõļǺÅ
- <bytes> ÊÇËæºóÊý¾Ý¿éµÄ³¤¶È£¬*²»°üÀ¨* ËüµÄ½ç¶¨·û¡°\r\n¡±
- <data block> ÊÇ·¢Ë͵ÄÊý¾Ý
Èç¹ûÔÚÈ¡»ØÇëÇóÖз¢ËÍÁËһЩ¼üÃû£¬¶ø·þÎñÆ÷ûÓÐËÍ»ØÏîÄ¿ÁÐ±í£¬ÕâÒâζ×Å·þÎñÆ÷ûÕâЩ¼üÃû£¨¿ÉÄÜÒòΪËüÃÇ´Óδ±»´æ´¢£¬»òÕßΪ¸øÆäËûÄÚÈÝÌÚ³ö¿Õ¼ä¶ø±»É¾³ý£¬»òÕßµ½ÆÚ£¬»òÕß±»ÒÑ¿Í»§¶Ëɾ³ý£©¡£
ɾ³ý
delete <key> <time>\r\n
- <key> ÊÇ¿Í»§¶ËÏ£Íû·þÎñÆ÷ɾ³ýµÄÄÚÈݵļüÃû
- <time> ÊÇÒ»¸öµ¥Î»ÎªÃëµÄʱ¼ä£¨»ò´ú±íÖ±µ½Ä³Ò»¿ÌµÄUnixʱ¼ä£©£¬ÔÚ¸Ãʱ¼äÄÚ·þÎñÆ÷»á¾Ü¾ø¶ÔÓڴ˼üÃûµÄ¡°add¡±ºÍ¡°replace¡±ÃüÁî¡£´ËʱÄÚÈݱ»·ÅÈëdelete¶ÓÁУ¬ÎÞ·¨ÔÙͨ¹ý¡°get¡±µÃµ½¸ÃÄÚÈÝ£¬Ò²ÎÞ·¨ÊÇÓá°add¡±ºÍ¡°replace¡±ÃüÁµ«ÊÇ¡°set¡±ÃüÁî¿ÉÓã©¡£Ö±µ½Ö¸¶¨Ê±¼ä£¬ÕâЩÄÚÈݱ»×îÖÕ´Ó·þÎñÆ÷µÄÄÚ´æÖг¹µ×Çå³ý¡£<time>²ÎÊýÊÇ¿ÉÑ¡µÄ£¬È±Ê¡Îª0£¨±íʾÄÚÈÝ»áÁ¢¿ÌÇå³ý£¬²¢ÇÒËæºóµÄ´æ´¢ÃüÁî¾ù¿ÉÓã©¡£
´ËÃüÁîÓÐÒ»ÐлØÓ¦£º- "DELETED\r\n"±íʾִÐгɹ¦
- "NOT_FOUND\r\n"±íʾûÓÐÕÒµ½ÕâÏîÄÚÈÝ
Ôö¼Ó/¼õÉÙ
ÃüÁî¡°incr¡±ºÍ¡°decr¡±±»ÓÃÀ´ÐÞ¸ÄÊý¾Ý£¬µ±Ò»Ð©ÄÚÈÝÐèÒªÌæ»»¡¢Ôö¼Ó»ò¼õÉÙʱ¡£ÕâЩÊý¾Ý±ØÐëÊÇÊ®½øÖƵÄ32λÎÞ·ûºÅÕûС£Èç¹û²»ÊÇ£¬Ôòµ±×÷0 À´´¦Àí¡£Ð޸ĵÄÄÚÈݱØÐë´æÔÚ£¬µ±Ê¹Óá°incr¡±/¡°decr¡±ÃüÁîÐ޸IJ»´æÔÚµÄÄÚÈÝʱ£¬²»»á±»µ±×÷0´¦Àí£¬¶øÊDzÙ×÷ʧ°Ü¡£
¿Í»§¶Ë·¢ËÍÃüÁîÐУº
incr <key> <value>\r\n»òdecr <key> <value>\r\n
- <key> ÊÇ¿Í»§¶ËÏ£ÍûÐ޸ĵÄÄÚÈݵĽ¨Ãû
- <value> ÊÇ¿Í»§¶ËÒªÔö¼Ó/¼õÉÙµÄ×ÜÊý¡£
»Ø¸´ÎªÒÔϼ¯ÖÐÇéÐΣº
- "NOT_FOUND\r\n"ָʾ¸ÃÏîÄÚÈݵÄÖµ£¬²»´æÔÚ¡£
- <value>\r\n £¬<value>ÊÇÔö¼Ó/¼õÉÙ¡£
×¢Òâ"decr"ÃüÁî·¢ÉúÏÂÒ磺Èç¹û¿Í»§¶Ë³¢ÊÔ¼õÉٵĽá¹ûСÓÚ0 ʱ£¬½á¹û»áÊÇ0¡£"incr" ÃüÁî²»»á·¢ÉúÒç³ö¡£
״̬
ÃüÁî"stats" ±»ÓÃÓÚ²éѯ·þÎñÆ÷µÄÔËÐÐ״̬ºÍÆäËûÄÚ²¿Êý¾Ý¡£ÓÐÁ½ÖÖ¸ñʽ¡£²»´ø²ÎÊýµÄ£º
stats\r\n
Õâ»áÔÚËæºóÊä³ö¸÷Ïî״̬¡¢É趨ֵºÍÎĵµ¡£ÁíÒ»ÖÖ¸ñʽ´øÓÐһЩ²ÎÊý£º
stats <args>\r\n
ͨ¹ý<args>£¬·þÎñÆ÷´«»Ø¸÷ÖÖÄÚ²¿Êý¾Ý¡£ÒòΪËæʱ¿ÉÄÜ·¢Éú±ä¶¯£¬±¾ÎIJ»Ìṩ²ÎÊýµÄÖÖÀ༰Æä´«»ØÊý¾Ý¡£
¸÷ÖÖ״̬
Êܵ½ÎÞ²ÎÊýµÄ"stats"ÃüÁîºó£¬·þÎñÆ÷·¢ËͶàÐÐÄÚÈÝ£¬ÈçÏ£º
STAT <name> <value>\r\n
·þÎñÆ÷ÓÃÒÔÏÂÒ»ÐÐÀ´ÖÕÖ¹Õâ¸öÇåµ¥£ºEND\r\n£¬ÔÚÿÐÐ״̬ÖУ¬<name> ÊÇ״̬µÄÃû×Ö£¬<value>ʹ״̬µÄÊý¾Ý¡£ÒÔÏÂÇåµ¥£¬ÊÇËùÓеÄ״̬Ãû³Æ£¬Êý¾ÝÀàÐÍ£¬ºÍÊý¾Ý´ú±íµÄº¬Òå¡£
ÔÚ¡°ÀàÐÍ¡±Ò»ÁÐÖУ¬"32u"±íʾ32 λÎÞ·ûºÅÕûÐÍ£¬"64u"±íʾ64 λÎÞ·ûºÅÕûÐÍ£¬"32u:32u"±íʾÓÃðºÅ¸ô¿ªµÄÁ½¸ö32 λÎÞ·ûºÅÕûÐÍ¡£
Ãû³Æ |
ÀàÐÍ |
º¬Òå |
pid |
32u |
·þÎñÆ÷½ø³ÌID |
uptime |
32u |
·þÎñÆ÷ÔËÐÐʱ¼ä£¬µ¥Î»Ãë |
time |
32u |
·þÎñÆ÷µ±Ç°µÄUNIXʱ¼ä |
version |
string |
·þÎñÆ÷µÄ°æ±¾ºÅ |
rusage_user |
32u |
¸Ã½ø³ÌÀۼƵÄÓû§Ê±¼ä(Ãë:΢Ãî) |
rusage_system |
32u |
¸Ã½ø³ÌÀۼƵÄϵͳʱ¼ä(Ãë:΢Ãî) |
curr_items |
32u |
·þÎñÆ÷µ±Ç°´æ´¢µÄÄÚÈÝÊýÁ¿ |
total_items |
32u |
·þÎñÆ÷Æô¶¯ÒÔÀ´´æ´¢¹ýµÄÄÚÈÝ×ÜÊý |
bytes |
64u |
·þÎñÆ÷µ±Ç°´æ´¢ÄÚÈÝËùÕ¼ÓõÄ×Ö½ÚÊý |
curr_connections |
32u |
Á¬½ÓÊý |
total_connections |
32u |
·þÎñÆ÷ÔËÐÐÒÔÀ´½ÓÊܵÄÁ¬½Ó×ÜÊý |
connection_structures |
32u |
·þÎñÆ÷·ÖÅäµÄÁ¬½Ó½á¹¹µÄÊýÁ¿ |
cmd_get |
32u |
È¡»ØÇëÇó×ÜÊý |
cmd_set |
32u |
´æ´¢ÇëÇó×ÜÊý |
get_hits |
32u |
ÇëÇó³É¹¦µÄ×Ü´ÎÊý |
get_misses |
32u |
ÇëÇóʧ°ÜµÄ×Ü´ÎÊý |
bytes_read |
64u |
·þÎñÆ÷´ÓÍøÂç¶ÁÈ¡µ½µÄ×Ü×Ö½ÚÊý |
bytes_written |
64u |
·þÎñÆ÷ÏòÍøÂç·¢Ë͵Ä×Ü×Ö½ÚÊý |
limit_maxbytes |
32u |
·þÎñÆ÷Ôڴ洢ʱ±»ÔÊÐíʹÓõÄ×Ö½Ú×ÜÊý |
Èç¹û²»Ïëÿ´Îͨ¹ýÊäÈëstatsÀ´²é¿´memcache״̬£¬¿ÉÒÔͨ¹ýecho "stats" |nc ip port À´²é¿´£¬ÀýÈ磺echo "stats" | nc 127.0.0.1 9023¡£
7.Memcache ÃüÖÐÂÊ
»º´æÃüÖÐÂÊ = get_hits/cmd_get * 100% £¨×ÜÃüÖдÎÊý/×ÜÇëÇó´ÎÊý)
ÒªÌá¸ßmemcachedµÄÃüÖÐÂÊ£¬Ô¤¹ÀÎÒÃǵÄvalue´óС²¢ÇÒÊʵ±µÄµ÷ÕûÄÚ´æÒ³´óСºÍÔö³¤Òò×ÓÊDZØÐëµÄ¡£
ÃüÖÐÂʵÄÌáÉý¿ÉÒÔͨ¹ý¶àÖÖ·½°¸ÊµÏÖ.
ÆäÒ»,Ìá¸ß·þÎñ»ñÈ¡µÄÄÚ´æ×ÜÁ¿
Æä¶þ,Ìá¸ß¿Õ¼äÀûÓÃÂÊ,Õâʵ¼ÊÉÏÒ²ÊÇÁíÒ»ÖÖ·½Ê½µÄÔö¼ÓÄÚ´æ×ÜÁ¿
ÆäÈý,Ó¦ÓÃÒ»¼¶±ðÉÏÔÙÀ´Ò»´ÎLRU
ÆäËÄ,¶ÔÓÚÕûÌåÃüÖÐÂÊ,¿ÉÒÔ²ÉÈ¡ÓÐЧµÄÈßÓà²ßÂÔ,¼õÉÙ·Ö²¼Ê½·þÎñʱij¸öserver·¢Éú·þÎñ¶¶¶¯µÄÇé¿ö
8.һЩעÒâ
1. memcacheÒѾ·ÖÅäµÄÄÚ´æ²»»áÔÙÖ÷¶¯ÇåÀí¡£
2. memcache·ÖÅä¸øij¸öslabµÄÄÚ´æÒ³²»ÄÜÔÙ·ÖÅä¸øÆäËûslab¡£
3. flush_all²»ÄÜÖØÖÃmemcache·ÖÅäÄÚ´æÒ³µÄ¸ñ¾Ö£¬Ö»ÊǸøËùÓеÄitemÖÃΪ¹ýÆÚ¡£
4. memcache×î´ó´æ´¢µÄitem(key+value)´óСÏÞÖÆΪ1M£¬ÕâÓÉpage´óС1MÏÞÖÆ
5£®ÓÉÓÚmemcacheµÄ·Ö²¼Ê½ÊÇ¿Í»§¶Ë³ÌÐòͨ¹ýhashËã·¨µÃµ½µÄkeyÈ¡Ä£À´ÊµÏÖ£¬²»Í¬µÄÓïÑÔ¿ÉÄÜ»á²ÉÓò»Í¬µÄhashËã·¨£¬Í¬ÑùµÄ¿Í»§¶Ë³ÌÐòÒ²ÓпÉÄÜʹÓÃÏàÒìµÄ·½·¨£¬Òò´ËÔÚ¶àÓïÑÔ¡¢¶àÄ£¿é¹²ÓÃͬһ×émemcached·þÎñʱ£¬Ò»¶¨Òª×¢ÒâÔÚ¿Í»§¶ËÑ¡ÔñÏàͬµÄhashËã·¨
6£®Æô¶¯memcachedʱ¿ÉÒÔͨ¹ý-M²ÎÊý½ûÖ¹LRUÌæ»»£¬ÔÚÄÚ´æÓþ¡Ê±addºÍset»á·µ»Øʧ°Ü
7£®memcachedÆô¶¯Ê±Ö¸¶¨µÄÊÇÊý¾Ý´æ´¢Á¿£¬Ã»ÓаüÀ¨±¾ÉíÕ¼ÓõÄÄÚ´æ¡¢ÒÔ¼°ÎªÁ˱£´æÊý¾Ý¶øÉèÖõĹÜÀí¿Õ¼ä¡£Òò´ËËüÕ¼ÓõÄÄÚ´æÁ¿»á¶àÓÚÆô¶¯Ê±Ö¸¶¨µÄÄÚ´æ·ÖÅäÁ¿£¬ÕâµãÐèҪעÒâ¡£
8£®memcache´æ´¢µÄʱºò¶ÔkeyµÄ³¤¶ÈÓÐÏÞÖÆ£¬phpºÍCµÄ×î´ó³¤¶È¶¼ÊÇ250
ÍƼöÐÅÏ¢
- ¡¾ÊÓƵ²¥·Å¡¿JplayerÊÓƵ²¥·ÅÆ÷µÄʹÓÃ
- memcacheÄÚ´æÔÀí
- Memcache¼¼Êõ·ÖÏí£º½éÉÜ¡¢Ê¹Óᢴ洢¡¢Ëã·¨¡¢ÓÅ»¯....
- php³£ÓÃÕýÔò±í´ïʽ
- phpÐÔÄܼà²âÄ£¿éXHProf
- ÈÃCI¿ò¼ÜÖ§³Öservice²ã
- ʹÓÃPHPÉú³É´øLOGOµÄ¸öÐÔ»¯¶þάÂëͼÏñ
- ¹ØÓÚCodeIgniterÄã¿ÉÄܲ»ÖªµÀµÄ5¸ö֪ʶµã
- Memcache ºÁÃ뼶³¬Ê±¼°ÆäËû³£¼ûÎÊÌâ»ã×Ü
- [PHP±Ê¼Ç]PHPQueryÒ»¸ö´¦ÀíDOMµÄÀûÆ÷
ÈÈÃÅÐÅÏ¢
- nohup: redirecting stderr to stdou....
- ʹÓÃlog_formatΪNginx·þÎñÆ÷ÉèÖøüÏêϸµÄÈÕÖ¾¸ñʽ
- jquery easyUI--dataGrid-Json
- [Ô´´]·ÂGoogle Reader¡¢ÐÂÀË΢²©¡¢ÌÚѶ΢²©µ....
- ÀûÓÃKeepalived+mysql¹¹½¨¸ß¿ÉÓÃMySQLË«Ö÷×Ô¶....
- Nginx+keepalivedʵÏÖ¸ºÔؾùºâºÍË«»úÈȱ¸¸ß¿ÉÓÃ
- jqueryʵÏÖÒ³Ãæ¼ÓÔؽø¶ÈÌõ
- Rolling cURL: PHP²¢·¢×î¼Ñʵ¼ù
- codeigniter ·ÓÉÖÕ¼«ÓÅ»¯(url rewrite)
- linuxÏÂÉèÖÃsshÎÞÃÜÂëµÇ¼
×î½ü¸üÐÂ
- PHP»ñÈ¡Óû§µÄÕæʵIP£¬²¢ÅжÏÊÇ·ñÄÚÍøIP
- PHP ´íÎóÈÕÖ¾ error_log
- ÀûÓÃbigpipe»úÖÆʵÏÖÒ³ÃæÄ£¿éµÄÒì²½äÖȾ chunked¼¼Êõ
- php¿ØÖÆÎļþÏÂÔØËÙ¶È
- js + php ¶ÁÈ¡¡¢²¥·ÅÊÓƵÁ÷ ¼æÈÝfirefox£¬c....
- ¡¾ÊÓƵ²¥·Å¡¿JplayerÊÓƵ²¥·ÅÆ÷µÄʹÓÃ
- UNICODE Óë UTF-8 µÄ¹Øϵ
- memcacheÄÚ´æÔÀí
- Memcache¼¼Êõ·ÖÏí£º½éÉÜ¡¢Ê¹Óᢴ洢¡¢Ëã·¨¡¢ÓÅ»¯....
- phpʹÓÃmb_detect_encoding¼ì²â×Ö·û´®±àÂë
ÆÀÂÛ