memcachedÊÇ»º´æ£¬ËùÒÔÊý¾Ý²»»áÓÀ¾Ã±£´æÔÚ·þÎñÆ÷ÉÏ£¬ÕâÊÇÏòϵͳÖÐÒýÈëmemcachedµÄǰÌá¡£
±¾´Î½éÉÜmemcachedµÄÊý¾Ýɾ³ý»úÖÆ£¬ÒÔ¼°memcachedµÄ×îз¢Õ¹·½Ïò¡ª¡ª¶þ½øÖÆÐÒ飨Binary
Protocol£© ºÍÍⲿÒýÇæÖ§³Ö¡£
memcachedÔÚÊý¾Ýɾ³ý·½ÃæÓÐЧÀûÓÃ×ÊÔ´
Êý¾Ý²»»áÕæÕý´ÓmemcachedÖÐÏûʧ
ÉϴνéÉܹý£¬ memcached²»»áÊÍ·ÅÒÑ·ÖÅäµÄÄÚ´æ¡£¼Ç¼³¬Ê±ºó£¬¿Í»§¶Ë¾ÍÎÞ·¨ÔÙ¿´¼û¸Ã¼Ç¼£¨invisible£¬Í¸Ã÷£©£¬
Æä´æ´¢¿Õ¼ä¼´¿ÉÖØ¸´Ê¹Óá£
Lazy Expiration
memcachedÄÚ²¿²»»á¼àÊӼǼÊÇ·ñ¹ýÆÚ£¬¶øÊÇÔÚgetʱ²é¿´¼Ç¼µÄʱ¼ä´Á£¬¼ì²é¼Ç¼ÊÇ·ñ¹ýÆÚ¡£
ÕâÖÖ¼¼Êõ±»³ÆÎªlazy£¨¶èÐÔ£©expiration¡£Òò´Ë£¬memcached²»»áÔÚ¹ýÆÚ¼àÊÓÉϺķÑCPUʱ¼ä¡£
LRU£º´Ó»º´æÖÐÓÐЧɾ³ýÊý¾ÝµÄÔÀí
memcached»áÓÅÏÈʹÓÃÒѳ¬Ê±µÄ¼Ç¼µÄ¿Õ¼ä£¬µ«¼´Ê¹Èç´Ë£¬Ò²»á·¢Éú×·¼ÓмǼʱ¿Õ¼ä²»×ãµÄÇé¿ö£¬
´Ëʱ¾ÍҪʹÓÃÃûΪ Least Recently Used£¨LRU£©»úÖÆÀ´·ÖÅä¿Õ¼ä¡£ ¹ËÃû˼Ò壬ÕâÊÇɾ³ý¡°×î½ü×îÉÙʹÓᱵļǼµÄ»úÖÆ¡£
Òò´Ë£¬µ±memcachedµÄÄÚ´æ¿Õ¼ä²»×ãʱ£¨ÎÞ·¨´Óslab class »ñÈ¡µ½ÐµĿռäʱ£©£¬¾Í´Ó×î½üδ±»Ê¹ÓõļǼÖÐËÑË÷£¬²¢½«Æä¿Õ¼ä·ÖÅ䏸еļǼ¡£
´Ó»º´æµÄʵÓýǶÈÀ´¿´£¬¸ÃÄ£ÐÍÊ®·ÖÀíÏë¡£
²»¹ý£¬ÓÐЩÇé¿öÏÂLRU»úÖÆ·´µ¹»áÔì³ÉÂé·³¡£memcachedÆô¶¯Ê±Í¨¹ý¡°-M¡±²ÎÊý¿ÉÒÔ½ûÖ¹LRU£¬ÈçÏÂËùʾ£º
Æô¶¯Ê±±ØÐë×¢ÒâµÄÊÇ£¬Ð¡Ð´µÄ¡°-m¡±Ñ¡ÏîÊÇÓÃÀ´Ö¸¶¨×î´óÄÚ´æ´óСµÄ¡£²»Ö¸¶¨¾ßÌåÊýÖµÔòʹÓÃĬÈÏÖµ64MB¡£
Ö¸¶¨¡°-M¡±²ÎÊýÆô¶¯ºó£¬ÄÚ´æÓþ¡Ê±memcached»á·µ»Ø´íÎó¡£ »°Ëµ»ØÀ´£¬memcached±Ï¾¹²»ÊÇ´æ´¢Æ÷£¬¶øÊÇ»º´æ£¬ËùÒÔÍÆ¼öʹÓÃLRU¡£
memcachedµÄ×îз¢Õ¹·½Ïò
memcachedµÄroadmapÉÏÓÐÁ½¸ö´óµÄÄ¿±ê¡£Ò»¸öÊǶþ½øÖÆÐÒéµÄ²ß»®ºÍʵÏÖ£¬ÁíÒ»¸öÊÇÍⲿÒýÇæµÄ¼ÓÔØ¹¦ÄÜ¡£
¹ØÓÚ¶þ½øÖÆÐÒé
ʹÓöþ½øÖÆÐÒéµÄÀíÓÉÊÇËü²»ÐèÒªÎı¾ÐÒéµÄ½âÎö´¦Àí£¬Ê¹µÃÔ±¾¸ßËÙµÄmemcachedµÄÐÔÄܸüÉÏÒ»²ãÂ¥£¬
»¹ÄܼõÉÙÎı¾ÐÒéµÄ©¶´¡£Ä¿Ç°ÒѴ󲿷ÖʵÏÖ£¬¿ª·¢ÓõĴúÂë¿âÖÐÒѰüº¬Á˸ù¦ÄÜ¡£ memcachedµÄÏÂÔØÒ³ÃæÉÏÓдúÂë¿âµÄÁ´½Ó¡£
http://danga.com/memcached/download.bml |
¶þ½øÖÆÐÒéµÄ¸ñʽ
ÐÒéµÄ°üΪ24×Ö½ÚµÄÖ¡£¬ÆäºóÃæÊǼüºÍÎ޽ṹÊý¾Ý£¨Unstructured
Data£©¡£ ʵ¼ÊµÄ¸ñʽÈçÏ£¨Òý×ÔÐÒéÎĵµ£©£º
Byte/ 0 | 1 | 2 | 3 | / | | | | |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| +---------------+---------------+---------------+---------------+ 0/ HEADER / / / / / / / +---------------+---------------+---------------+---------------+ 24/ COMMAND-SPECIFIC EXTRAS (as needed) / +/ (note length in th extras length header field) / +---------------+---------------+---------------+---------------+ m/ Key (as needed) / +/ (note length in key length header field) / +---------------+---------------+---------------+---------------+ n/ Value (as needed) / +/ (note length is total body length header field, minus / +/ sum of the extras and key length body fields) / +---------------+---------------+---------------+---------------+ Total 24 bytes |
ÈçÉÏËùʾ£¬°ü¸ñʽʮ·Ö¼òµ¥¡£ÐèҪעÒâµÄÊÇ£¬Õ¼¾ÝÁË16×Ö½ÚµÄÍ·²¿(HEADER)·ÖΪ ÇëÇóÍ·£¨Request
Header£©ºÍÏìӦͷ£¨Response Header£©Á½ÖÖ¡£ Í·²¿Öаüº¬Á˱íʾ°üµÄÓÐЧÐÔµÄMagic×Ö½Ú¡¢ÃüÁîÖÖÀà¡¢¼ü³¤¶È¡¢Öµ³¤¶ÈµÈÐÅÏ¢£¬¸ñʽÈçÏ£º
Request Header
Byte/ 0 | 1 | 2 | 3 |
/ | | | |
|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
+---------------+---------------+---------------+---------------+
0| Magic | Opcode | Key length |
+---------------+---------------+---------------+---------------+
4| Extras length | Data type | Reserved |
+---------------+---------------+---------------+---------------+
8| Total body length |
+---------------+---------------+---------------+---------------+
12| Opaque |
+---------------+---------------+---------------+---------------+
16| CAS |
| |
+---------------+---------------+---------------+---------------+
Response Header
Byte/ 0 | 1 | 2 | 3 |
/ | | | |
|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
+---------------+---------------+---------------+---------------+
0| Magic | Opcode | Key Length |
+---------------+---------------+---------------+---------------+
4| Extras length | Data type | Status |
+---------------+---------------+---------------+---------------+
8| Total body length |
+---------------+---------------+---------------+---------------+
12| Opaque |
+---------------+---------------+---------------+---------------+
16| CAS |
| |
+---------------+---------------+---------------+---------------+ |
ÈçÏ£ÍûÁ˽â¸÷¸ö²¿·ÖµÄÏêϸÄÚÈÝ£¬¿ÉÒÔcheckout³ömemcachedµÄ¶þ½øÖÆÐÒéµÄ´úÂëÊ÷£¬
²Î¿¼ÆäÖеÄdocsÎļþ¼ÐÖеÄprotocol_binary.txtÎĵµ¡£
HEADERÖÐÒýÈËעĿµÄµØ·½
¿´µ½HEADER¸ñʽºóÎҵĸÐÏëÊÇ£¬¼üµÄÉÏÏÞÌ«´óÁË£¡ÏÖÔÚµÄmemcached¹æ¸ñÖУ¬¼ü³¤¶È×î´óΪ250×Ö½Ú£¬
µ«¶þ½øÖÆÐÒéÖмüµÄ´óСÓÃ2×Ö½Ú±íʾ¡£Òò´Ë£¬ÀíÂÛÉÏ×î´ó¿ÉʹÓÃ65536×Ö½Ú£¨2<sup>16</sup>£©³¤µÄ¼ü¡£
¾¡¹Ü250×Ö½ÚÒÔÉϵļü²¢²»»áÌ«³£Ó㬶þ½øÖÆÐÒé·¢²¼Ö®ºó¾Í¿ÉÒÔʹÓþ޴óµÄ¼üÁË¡£
¶þ½øÖÆÐÒé´ÓÏÂÒ»°æ±¾1.3ϵÁпªÊ¼Ö§³Ö¡£
ÍⲿÒýÇæÖ§³Ö
ÎÒÈ¥ÄêÔø¾ÊÔÑéÐԵؽ«memcachedµÄ´æ´¢²ã¸ÄÔì³ÉÁË¿ÉÀ©Õ¹µÄ£¨pluggable£©¡£
http://alpha.mixi.co.jp/blog/?p=129 |
MySQLµÄBrian Aker¿´µ½Õâ¸ö¸ÄÔìÖ®ºó£¬¾Í½«´úÂë·¢µ½ÁËmemcachedµÄÓʼþÁÐ±í¡£
memcachedµÄ¿ª·¢ÕßҲʮ·Ö¸ÐÐËȤ£¬¾Í·Åµ½ÁËroadmapÖС£ÏÖÔÚÓÉÎÒºÍ memcachedµÄ¿ª·¢ÕßTrond
NorbyeÐͬ¿ª·¢£¨¹æ¸ñÉè¼Æ¡¢ÊµÏֺͲâÊÔ£©¡£ ºÍ¹úÍâÐͬ¿ª·¢Ê±Ê±²îÊǸö´óÎÊÌ⣬µ«±§×ÅÏàͬµÄÔ¸¾°£¬ ×îºóÖÕÓÚ¿ÉÒÔ½«¿ÉÀ©Õ¹¼Ü¹¹µÄÔÐ͹«²¼ÁË¡£
´úÂë¿â¿ÉÒÔ´ÓmemcachedµÄÏÂÔØÒ³Ãæ ÉÏ·ÃÎÊ¡£
ÍⲿÒýÇæÖ§³ÖµÄ±ØÒªÐÔ
ÊÀ½çÉÏÓÐÐí¶àmemcachedµÄÅÉÉúÈí¼þ£¬ÆäÀíÓÉÊÇÏ£ÍûÓÀ¾Ã±£´æÊý¾Ý¡¢ÊµÏÖÊý¾ÝÈßÓàµÈ£¬
¼´Ê¹ÎþÉüһЩÐÔÄÜÒ²ÔÚËù²»Ï§¡£ÎÒÔÚ¿ª·¢memcached֮ǰ£¬ÔÚmixiµÄÑз¢²¿Ò²Ôø¾ ¿¼ÂǹýÖØÐ·¢Ã÷memcached¡£
ÍⲿÒýÇæµÄ¼ÓÔØ»úÖÆÄÜ·â×°memcachedµÄÍøÂ繦ÄÜ¡¢Ê¼þ´¦ÀíµÈ¸´ÔӵĴ¦Àí¡£
Òò´Ë£¬ÏÖ½×¶Îͨ¹ýÇ¿ÖÆÊֶλòÖØÐÂÉè¼ÆµÈ·½Ê½Ê¹memcachedºÍ´æ´¢ÒýÇæºÏ×÷µÄÀ§ÄÑ ¾Í»áÑÌÏûÔÆÉ¢£¬³¢ÊÔ¸÷ÖÖÒýÇæ¾Í»á±äµÃÇá¶øÒ×¾ÙÁË¡£
¼òµ¥APIÉè¼ÆµÄ³É¹¦µÄ¹Ø¼ü
¸ÃÏîÄ¿ÖÐÎÒÃÇ×îÖØÊÓµÄÊÇAPIÉè¼Æ¡£º¯Êý¹ý¶à£¬»áʹÒýÇæ¿ª·¢Õ߸е½Âé·³£» ¹ýÓÚ¸´ÔÓ£¬ÊµÏÖÒýÇæµÄÃż÷¾Í»á¹ý¸ß¡£Òò´Ë£¬×î³õ°æ±¾µÄ½Ó¿Úº¯ÊýÖ»ÓÐ13¸ö¡£
¾ßÌåÄÚÈÝÏÞÓÚÆª·ù£¬ÕâÀï¾ÍÊ¡ÂÔÁË£¬½ö˵Ã÷Ò»ÏÂÒýÇæÓ¦µ±Íê³ÉµÄ²Ù×÷£º
ÒýÇæÐÅÏ¢£¨°æ±¾µÈ£©
ÒýÇæ³õʼ»¯
ÒýÇæ¹Ø±Õ
ÒýÇæµÄͳ¼ÆÐÅÏ¢
ÔÚÈÝÁ¿·½Ã棬²âÊÔ¸ø¶¨¼Ç¼ÄÜ·ñ±£´æ
Ϊitem£¨¼Ç¼£©½á¹¹·ÖÅäÄÚ´æ
ÊÍ·Åitem£¨¼Ç¼£©µÄÄÚ´æ
ɾ³ý¼Ç¼
±£´æ¼Ç¼
»ØÊռǼ
¸üмǼµÄʱ¼ä´Á
ÊýѧÔËËã´¦Àí
Êý¾ÝµÄflush
¶ÔÏêϸ¹æ¸ñÓÐÐËȤµÄ¶ÁÕߣ¬¿ÉÒÔcheckout engineÏîÄ¿µÄ´úÂ룬ÔĶÁÆ÷ÖеÄengine.h¡£
ÖØÐÂÉóÊÓÏÖÔÚµÄÌåϵ
memcachedÖ§³ÖÍⲿ´æ´¢µÄÄѵãÊÇ£¬ÍøÂçºÍʼþ´¦ÀíÏà¹ØµÄ´úÂ루ºËÐÄ·þÎñÆ÷£©Óë
ÄÚ´æ´æ´¢µÄ´úÂë½ôÃܹØÁª¡£ÕâÖÖÏÖÏóÒ²³ÆÎªtightly coupled£¨½ôÃÜñîºÏ£©¡£ ±ØÐ뽫ÄÚ´æ´æ´¢µÄ´úÂë´ÓºËÐÄ·þÎñÆ÷ÖжÀÁ¢³öÀ´£¬²ÅÄÜÁé»îµØÖ§³ÖÍⲿÒýÇæ¡£
Òò´Ë£¬»ùÓÚÎÒÃÇÉè¼ÆµÄAPI£¬memcached±»Öع¹³ÉÏÂÃæµÄÑù×Ó£º
ÖØ¹¹Ö®ºó£¬ÎÒÃÇÓë1.2.5°æ¡¢¶þ½øÖÆÐÒéÖ§³Ö°æµÈ½øÐÐÁËÐÔÄܶԱȣ¬Ö¤ÊµÁËËü²»»áÔì³ÉÐÔÄÜÓ°Ïì¡£
ÔÚ¿¼ÂÇÈçºÎÖ§³ÖÍⲿÒýÇæ¼ÓÔØÊ±£¬ÈÃmemcached½øÐв¢ÐпØÖÆ£¨concurrency
control£©µÄ·½°¸ÊÇ×îΪÈÝÒ׵ģ¬ µ«ÊǶÔÓÚÒýÇæ¶øÑÔ£¬²¢ÐпØÖÆÕýÊÇÐÔÄܵÄÕæÚУ¬Òò´ËÎÒÃDzÉÓÃÁ˽«¶àÏß³ÌÖ§³ÖÍêÈ«½»¸øÒýÇæµÄÉè¼Æ·½°¸¡£
ÒÔºóµÄ¸Ä½ø£¬»áʹµÃmemcachedµÄÓ¦Ó÷¶Î§¸üΪ¹ã·º¡£
×ܽá
±¾´Î½éÉÜÁËmemcachedµÄ³¬Ê±ÔÀí¡¢ÄÚ²¿ÈçºÎɾ³ýÊý¾ÝµÈ£¬ÔÚ´ËÖ®ÉÏÓÖ½éÉÜÁ˶þ½øÖÆÐÒéºÍ
ÍⲿÒýÇæÖ§³ÖµÈmemcachedµÄ×îз¢Õ¹·½Ïò¡£ÕâЩ¹¦ÄÜÒªµ½1.3°æ²Å»áÖ§³Ö£¬¾´ÇëÆÚ´ý£¡
ÕâÊÇÎÒÔÚ±¾Á¬ÔØÖеÄ×îºóһƪ¡£¸Ðл´ó¼ÒÔĶÁÎÒµÄÎÄÕ£¡
Ï´ÎÓɳ¤Ò°À´½éÉÜmemcachedµÄÓ¦ÓÃ֪ʶºÍÓ¦ÓóÌÐò¼æÈÝÐÔµÈÄÚÈÝ¡£
|