1. Memcached¼ò½é
MemcachedÊÇÒÔLiveJurnalÆìÏÂDanga Interactive¹«Ë¾µÄBard
FitzpatricΪÊ׿ª·¢µÄ¸ßÐÔÄÜ·Ö²¼Ê½Äڴ滺´æ·þÎñÆ÷¡£Æä±¾ÖÊÉϾÍÊÇÒ»¸öÄÚ´ækey-valueÊý¾Ý¿â£¬µ«ÊDz»Ö§³ÖÊý¾ÝµÄ³Ö¾Ã»¯£¬·þÎñÆ÷¹Ø±ÕÖ®ºóÊý
¾ÝÈ«²¿¶ªÊ§¡£MemcachedʹÓÃCÓïÑÔ¿ª·¢£¬ÔÚ´ó¶àÊýÏñLinux¡¢BSDºÍSolarisµÈPOSIXϵͳÉÏ£¬Ö»Òª°²×°ÁËlibevent¼´¿Éʹ
Óá£ÔÚWindowsÏ£¬ËüÒ²ÓÐÒ»¸ö¿ÉÓõķǹٷ½°æ±¾(http://code.jellycan.com/memcached/)
Memcached µÄ¿Í»§¶ËÈí¼þʵÏַdz£¶à£¬°üÀ¨C/C++, PHP,
Java, Python, Ruby, Perl, Erlang, LuaµÈ¡£µ±Ç°MemcachedʹÓù㷺£¬³ýÁËLiveJournalÒÔÍ⻹ÓÐWikipedia¡¢Flickr¡¢Twitter¡¢YoutubeºÍ
WordPressµÈ¡£
ÔÚWindowϵͳÏ£¬MemcachedµÄ°²×°·Ç³£·½±ã£¬Ö»Ðè´ÓÒÔÉϸø³öµÄµØÖ·ÏÂÔØ¿ÉÖ´ÐÐÈí¼þÈ»ºóÔËÐÐmemcached.exe
¨Cd install¼´¿ÉÍê³É°²×°¡£ÔÚLinuxµÈϵͳÏ£¬ÎÒÃÇÊ×ÏÈÐèÒª°²×°libevent£¬È»ºó´Ó»ñȡԴÂ룬make
&& make install¼´¿É¡£Ä¬ÈÏÇé¿öÏ£¬MemcachedµÄ·þÎñÆ÷Æô¶¯³ÌÐò»á°²×°µ½/usr/local/binĿ¼Ï¡£ÔÚÆô¶¯Memcachedʱ£¬ÎÒÃÇ¿É
ÒÔΪÆäÅäÖò»Í¬µÄÆô¶¯²ÎÊý¡£
1.1 MemcacheÅäÖÃ
Memcached·þÎñÆ÷ÔÚÆô¶¯Ê±ÐèÒª¶Ô¹Ø¼üµÄ²ÎÊý½øÐÐÅäÖã¬ÏÂÃæÎÒÃǾͿ´Ò»¿´MemcachedÔÚÆô¶¯Ê±ÐèÒªÉ趨ÄÄЩ¹Ø¼ü²ÎÊýÒÔ¼°ÕâЩ²ÎÊýµÄ×÷Óá£
1£©-p MemcachedµÄTCP¼àÌý¶Ë¿Ú£¬È±Ê¡ÅäÖÃΪ11211£»
2£©-U MemcachedµÄUDP¼àÌý¶Ë¿Ú£¬È±Ê¡ÅäÖÃΪ11211£¬Îª0ʱ±íʾ¹Ø±ÕUDP¼àÌý£»
3£©-s Memcached¼àÌýµÄUNIXÌ×½Ó×Ö·¾¶£»
4£©-a ·ÃÎÊUNIXÌ×½Ó×ֵİ˽øÖÆÑÚÂ룬ȱʡÅäÖÃΪ0700£»
5£©-l ¼àÌýµÄ·þÎñÆ÷IPµØÖ·£¬Ä¬ÈÏΪËùÓÐÍø¿¨£»
6£©-d ΪMemcached·þÎñÆ÷Æô¶¯ÊØ»¤½ø³Ì£»
7£©-r ×î´ócoreÎļþ´óС£»
8£©-u ÔËÐÐMemcachedµÄÓû§£¬Èç¹ûµ±Ç°ÎªrootµÄ»°ÐèҪʹÓô˲ÎÊýÖ¸¶¨Óû§£»
9£©-m ·ÖÅ䏸MemcachedʹÓõÄÄÚ´æÊýÁ¿£¬µ¥Î»ÊÇMB£»
10£©-M ָʾMemcachedÔÚÄÚ´æÓùâµÄʱºò·µ»Ø´íÎó¶ø²»ÊÇʹÓÃLRUËã·¨ÒÆ³ýÊý¾Ý¼Ç¼£»
11£©-c ×î´ó²¢·¢Á¬Êý£¬È±Ê¡ÅäÖÃΪ1024£»
12£©-v ¨Cvv ¨Cvvv É趨·þÎñÆ÷¶Ë´òÓ¡µÄÏûÏ¢µÄÏêϸ³Ì¶È£¬ÆäÖÐ-v½ö´òÓ¡´íÎóºÍ¾¯¸æÐÅÏ¢£¬-vvÔÚ-vµÄ»ù´¡ÉÏ»¹»á´òÓ¡¿Í»§¶ËµÄÃüÁîºÍÏàÓ¦£¬-vvvÔÚ-vvµÄ»ù´¡ÉÏ»¹»á´òÓ¡ÄÚ´æ×´Ì¬×ª»»ÐÅÏ¢£»
13£©-f ÓÃÓÚÉèÖÃchunk´óСµÄµÝÔöÒò×Ó£»
14£©-n ×îСµÄchunk´óС£¬È±Ê¡ÅäÖÃΪ48¸ö×Ö½Ú£»
15£©-t Memcached·þÎñÆ÷ʹÓõÄÏß³ÌÊý£¬È±Ê¡ÅäÖÃΪ4¸ö£»
16£©-L ³¢ÊÔʹÓôóÄÚ´æÒ³£»
17£©-R ÿ¸öʼþµÄ×î´óÇëÇóÊý£¬È±Ê¡ÅäÖÃΪ20¸ö£»
18£©-C ½ûÓÃCAS£¬CASģʽ»á´øÀ´8¸ö×Ö½ÚµÄÈßÓࣻ
2. Redis¼ò½é
RedisÊÇÒ»¸ö¿ªÔ´µÄkey-value´æ´¢ÏµÍ³¡£ÓëMemcachedÀàËÆ£¬Redis½«´ó²¿·ÖÊý¾Ý´æ´¢ÔÚÄÚ´æÖУ¬Ö§³ÖµÄÊý¾ÝÀàÐͰüÀ¨£º×Ö·û
´®¡¢¹þÏ£±í¡¢Á´±í¡¢¼¯ºÏ¡¢ÓÐÐò¼¯ºÏÒÔ¼°»ùÓÚÕâЩÊý¾ÝÀàÐ͵ÄÏà¹Ø²Ù×÷¡£RedisʹÓÃCÓïÑÔ¿ª·¢£¬ÔÚ´ó¶àÊýÏñLinux¡¢BSDºÍSolarisµÈ
POSIXϵͳÉÏÎÞÐèÈκÎÍⲿÒÀÀµ¾Í¿ÉÒÔʹÓá£RedisÖ§³ÖµÄ¿Í»§¶ËÓïÑÔÒ²·Ç³£·á¸»£¬³£ÓõļÆËã»úÓïÑÔÈçC¡¢C#¡¢C++¡¢Object-C¡¢PHP¡¢
Python¡¢ Java¡¢Perl¡¢Lua¡¢ErlangµÈ¾ùÓпÉÓõĿͻ§¶ËÀ´·ÃÎÊRedis·þÎñÆ÷¡£µ±Ç°RedisµÄÓ¦ÓÃÒѾ·Ç³£¹ã·º£¬¹úÄÚÏñÐÂÀË¡¢ÌÔ±¦£¬¹úÍâÏñ
Flickr¡¢GithubµÈ¾ùÔÚʹÓÃRedisµÄ»º´æ·þÎñ¡£
RedisµÄ°²×°·Ç³£·½±ã£¬Ö»Ðè´Óhttp://redis.io/download»ñȡԴÂ룬Ȼºómake
&& make install¼´¿É¡£Ä¬ÈÏÇé¿öÏ£¬RedisµÄ·þÎñÆ÷Æô¶¯³ÌÐòºÍ¿Í»§¶Ë³ÌÐò»á°²×°µ½/usr/local/binĿ¼Ï¡£ÔÚÆô¶¯Redis·þÎñÆ÷ʱ£¬ÎÒÃÇ
ÐèҪΪÆäÖ¸¶¨Ò»¸öÅäÖÃÎļþ£¬È±Ê¡Çé¿öÏÂÅäÖÃÎļþÔÚRedisµÄÔ´ÂëĿ¼Ï£¬ÎļþÃûΪredis.conf¡£
2.1 RedisÅäÖÃÎļþ
ΪÁ˶ÔRedisµÄϵͳʵÏÖÓÐÒ»¸öÖ±½ÓµÄÈÏʶ£¬ÎÒÃÇÊ×ÏÈÀ´¿´Ò»ÏÂRedisµÄÅäÖÃÎļþÖж¨ÒåÁËÄÄЩÖ÷Òª²ÎÊýÒÔ¼°ÕâЩ²ÎÊýµÄ×÷Óá£
1£©daemonize no ĬÈÏÇé¿öÏ£¬redis²»ÊÇÔÚºǫ́ÔËÐеġ£Èç¹ûÐèÒªÔÚºǫ́ÔËÐУ¬°Ñ¸ÃÏîµÄÖµ¸ü¸ÄΪyes£»
2£©pidfile /var/run/redis.pidµ±RedisÔÚºǫ́ÔËÐеÄʱºò£¬RedisĬÈÏ»á°ÑpidÎļþ·ÅÔÚ/var/run/redis.pid£¬Äã¿ÉÒÔÅäÖõ½ÆäËûµØÖ·¡£µ±ÔËÐжà¸öredis·þÎñʱ£¬ÐèÒªÖ¸¶¨²»Í¬µÄpidÎļþºÍ¶Ë¿Ú£»
3£©port 6379Ö¸¶¨redisÔËÐеĶ˿ڣ¬Ä¬ÈÏÊÇ6379£»
4£©bind 127.0.0.1 Ö¸¶¨redisÖ»½ÓÊÕÀ´×ÔÓÚ¸ÃIPµØÖ·µÄÇëÇó£¬Èç¹û²»½øÐÐÉèÖã¬ÄÇô½«´¦ÀíËùÓÐÇëÇó¡£ÔÚÉú²ú»·¾³ÖÐ×îºÃÉèÖøÃÏ
5£©loglevel debug Ö¸¶¨ÈÕÖ¾¼Ç¼¼¶±ð£¬ÆäÖÐRedis×ܹ²Ö§³ÖËĸö¼¶±ð£ºdebug¡¢verbose¡¢notice¡¢warning£¬Ä¬ÈÏΪverbose¡£debug±íʾ
¼Ç¼ºÜ¶àÐÅÏ¢£¬ÓÃÓÚ¿ª·¢ºÍ²âÊÔ¡£verbose±íʾ¼Ç¼ÓÐÓõÄÐÅÏ¢£¬µ«²»Ïñdebug»á¼Ç¼ÄÇô¶à¡£notice±íʾÆÕͨµÄverbose£¬³£ÓÃÓÚÉú²ú»·
¾³¡£warning ±íʾֻÓзdz£ÖØÒª»òÕßÑÏÖØµÄÐÅÏ¢»á¼Ç¼µ½ÈÕÖ¾£»
6£©logfile /var/log/redis/redis.log ÅäÖÃlogÎļþµØÖ·£¬Ä¬ÈÏֵΪstdout¡£Èôºǫ́ģʽ»áÊä³öµ½/dev/null£»
7£©databases 16 ¿ÉÓÃÊý¾Ý¿âÊý£¬Ä¬ÈÏֵΪ16£¬Ä¬ÈÏÊý¾Ý¿âΪ0£¬Êý¾Ý¿â·¶Î§ÔÚ0-£¨database-1£©Ö®¼ä£»
8£©save 900 1±£´æÊý¾Ýµ½´ÅÅÌ£¬¸ñʽΪsave £¬Ö¸³öÔڶ೤ʱ¼äÄÚ£¬ÓжàÉٴθüвÙ×÷£¬¾Í½«Êý¾Ýͬ²½µ½Êý¾ÝÎļþrdb¡£Ï൱ÓÚÌõ¼þ´¥·¢×¥È¡¿ìÕÕ£¬Õâ¸ö¿ÉÒÔ¶à¸öÌõ¼þÅäºÏ¡£
save 900 1¾Í±íʾ900ÃëÄÚÖÁÉÙÓÐ1¸ökey±»¸Ä±ä¾Í±£´æÊý¾Ýµ½´ÅÅÌ£»
9£©rdbcompression yes ´æ´¢ÖÁ±¾µØÊý¾Ý¿âʱ£¨³Ö¾Ã»¯µ½rdbÎļþ£©ÊÇ·ñѹËõÊý¾Ý£¬Ä¬ÈÏΪyes£»
10£©dbfilename dump.rdb±¾µØ³Ö¾Ã»¯Êý¾Ý¿âÎļþÃû£¬Ä¬ÈÏֵΪdump.rdb£»
11£©dir ./ ¹¤×÷Ŀ¼£¬Êý¾Ý¿â¾µÏñ±¸·ÝµÄÎļþ·ÅÖõÄ·¾¶¡£ÕâÀïµÄ·¾¶¸úÎļþÃûÒª·Ö¿ªÅäÖÃÊÇÒòΪredisÔÚ½øÐб¸·Ýʱ£¬ÏȻὫµ±Ç°Êý¾Ý¿âµÄ״̬дÈëµ½Ò»¸öÁÙʱÎļþÖУ¬
µÈ±¸·ÝÍê³Éʱ£¬ÔٰѸÃÁÙʱÎļþÌæ»»ÎªÉÏÃæËùÖ¸¶¨µÄÎļþ¡£¶øÕâÀïµÄÁÙʱÎļþºÍÉÏÃæËùÅäÖõı¸·ÝÎļþ¶¼»á·ÅÔÚÕâ¸öÖ¸¶¨µÄ·¾¶µ±ÖУ¬AOFÎļþÒ²»á´æ·ÅÔÚÕâ¸öÄ¿
¼ÏÂÃæ¡£×¢ÒâÕâÀï±ØÐëÖ¸¶¨Ò»¸öĿ¼¶ø²»ÊÇÎļþ£»
12£©slaveof Ö÷´Ó¸´ÖÆ£¬ÉèÖøÃÊý¾Ý¿âΪÆäËûÊý¾Ý¿âµÄ´ÓÊý¾Ý¿â¡£ÉèÖõ±±¾»úΪslave·þÎñʱ£¬ÉèÖÃmaster·þÎñµÄIPµØÖ·¼°¶Ë¿Ú¡£ÔÚRedisÆô¶¯Ê±£¬Ëü»á×Ô¶¯´Ó
master½øÐÐÊý¾Ýͬ²½£»
13£©masterauth µ±master·þÎñÉèÖÃÁËÃÜÂë±£»¤Ê±(ÓÃrequirepassÖÆ¶¨µÄÃÜÂë)slave·þÎñÁ¬½ÓmasterµÄÃÜÂ룻
14£©slave-serve-stale-data yes µ±´Ó¿âͬÖ÷»úʧȥÁ¬½Ó»òÕ߸´ÖÆÕýÔÚ½øÐУ¬´Ó»ú¿âÓÐÁ½ÖÖÔËÐз½Ê½£ºÈç¹ûslave-serve-stale-dataÉèÖÃΪyes(ĬÈÏÉèÖÃ)£¬´Ó¿â»á¼ÌÐø
ÏàÓ¦¿Í»§¶ËµÄÇëÇó¡£Èç¹ûslave-serve-stale-dataÊÇָΪno£¬³ýÈ¥INFOºÍSLAVOFÃüÁîÖ®ÍâµÄÈκÎÇëÇ󶼻᷵»ØÒ»¸ö´í
Îó"SYNC with master in progress"£»
15£©repl-ping-slave-period 10´Ó¿â»á°´ÕÕÒ»¸öʱ¼ä¼ä¸ôÏòÖ÷¿â·¢ËÍPING£¬¿ÉÒÔͨ¹ýrepl-ping-slave-periodÉèÖÃÕâ¸öʱ¼ä¼ä¸ô£¬Ä¬ÈÏÊÇ10Ã룻
16£©repl-timeout 60 ÉèÖÃÖ÷¿âÅúÁ¿Êý¾Ý´«Êäʱ¼ä»òÕßping»Ø¸´Ê±¼ä¼ä¸ô£¬Ä¬ÈÏÖµÊÇ60Ã룬һ¶¨ÒªÈ·±£repl-timeout´óÓÚrepl-ping-slave-period£»
17£©requirepass foobared ÉèÖÿͻ§¶ËÁ¬½Óºó½øÐÐÈÎºÎÆäËûÖ¸¶¨Ç°ÐèҪʹÓõÄÃÜÂë¡£ÒòΪredisËÙ¶ÈÏ൱¿ì£¬ËùÒÔÔÚһ̨±È½ÏºÃµÄ·þÎñÆ÷Ï£¬Ò»¸öÍⲿµÄÓû§¿ÉÒÔÔÚÒ»ÃëÖÓ½øÐÐ150K´ÎµÄÃÜÂë³¢ÊÔ£¬ÕâÒâζ×ÅÄãÐèÒªÖ¸¶¨·Ç³£Ç¿´óµÄÃÜÂëÀ´·ÀÖ¹±©Á¦ÆÆ½â£»
18£©rename-command CONFIG "" ÃüÁîÖØÃüÃû£¬ÔÚÒ»¸ö¹²Ïí»·¾³Ï¿ÉÒÔÖØÃüÃûÏà¶ÔΣÏÕµÄÃüÁ±ÈÈç°ÑCONFIGÖØÃûΪһ¸ö²»ÈÝÒײ²âµÄ×Ö·û£º#
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52¡£Èç¹ûÏëɾ³ýÒ»¸öÃüÁֱ½Ó°ÑËüÖØÃüÃûΪһ¸ö¿Õ×Ö·û""¼´
¿É£ºrename-command CONFIG ""£»
19£©maxclients 128ÉèÖÃͬһʱ¼ä×î´ó¿Í»§¶ËÁ¬½ÓÊý£¬Ä¬ÈÏÎÞÏÞÖÆ¡£Redis¿ÉÒÔͬʱ´ò¿ªµÄ¿Í»§¶ËÁ¬½ÓÊýΪRedis½ø³Ì¿ÉÒÔ´ò¿ªµÄ×î´óÎļþÃèÊö·ûÊý¡£Èç¹ûÉèÖÃ
maxclients 0£¬±íʾ²»×÷ÏÞÖÆ¡£µ±¿Í»§¶ËÁ¬½ÓÊýµ½´ïÏÞÖÆÊ±£¬Redis»á¹Ø±ÕеÄÁ¬½Ó²¢Ïò¿Í»§¶Ë·µ»Ømax
number of clients reached´íÎóÐÅÏ¢£»
20£©maxmemory Ö¸¶¨Redis×î´óÄÚ´æÏÞÖÆ¡£RedisÔÚÆô¶¯Ê±»á°ÑÊý¾Ý¼ÓÔØµ½ÄÚ´æÖУ¬´ïµ½×î´óÄÚ´æºó£¬Redis»áÏȳ¢ÊÔÇå³ýÒѵ½ÆÚ»ò¼´½«µ½ÆÚµÄKey£¬Redisͬ
ʱҲ»áÒÆ³ý¿ÕµÄlist¶ÔÏó¡£µ±´Ë·½·¨´¦Àíºó£¬ÈÔÈ»µ½´ï×î´óÄÚ´æÉèÖ㬽«ÎÞ·¨ÔÙ½øÐÐдÈë²Ù×÷£¬µ«ÈÔÈ»¿ÉÒÔ½øÐжÁÈ¡²Ù×÷¡£×¢Ò⣺RedisеÄvm»úÖÆ£¬»á
°ÑKey´æ·ÅÄڴ棬Value»á´æ·ÅÔÚswapÇø£»
21£©maxmemory-policy volatile-lru µ±ÄÚ´æ´ïµ½×î´óÖµµÄʱºòRedis»áÑ¡Ôñɾ³ýÄÄЩÊý¾ÝÄØ£¿ÓÐÎåÖÖ·½Ê½¿É¹©Ñ¡Ôñ£ºvolatile-lru´ú±íÀûÓÃLRUËã·¨ÒÆ³ýÉèÖùý¹ýÆÚʱ¼äµÄkey
(LRU:×î½üʹÓà Least Recently Used )£¬allkeys-lru´ú±íÀûÓÃLRUËã·¨ÒÆ³ýÈκÎkey£¬volatile-random´ú±íÒÆ³ýÉèÖùý¹ýÆÚʱ¼äµÄËæ»ú
key£¬allkeys_random´ú±íÒÆ³ýÒ»¸öËæ»úµÄkey£¬volatile-ttl´ú±íÒÆ³ý¼´½«¹ýÆÚµÄkey(minor
TTL)£¬noeviction´ú±í²»ÒƳýÈκÎkey£¬Ö»ÊÇ·µ»ØÒ»¸öд´íÎó¡£
×¢Ò⣺¶ÔÓÚÉÏÃæµÄ²ßÂÔ£¬Èç¹ûûÓкÏÊʵÄkey¿ÉÒÔÒÆ³ý£¬Ð´µÄʱºòRedis»á·µ»ØÒ»¸ö´íÎó£»
22£©appendonly no ĬÈÏÇé¿öÏ£¬redis»áÔÚºǫ́Òì²½µÄ°ÑÊý¾Ý¿â¾µÏñ±¸·Ýµ½´ÅÅÌ£¬µ«ÊǸñ¸·ÝÊǷdz£ºÄʱµÄ£¬¶øÇÒ±¸·ÝÒ²²»ÄÜºÜÆµ·±¡£Èç¹û·¢ÉúÖîÈçÀÕ¢Ï޵硢°Î²åÍ·µÈ×´¿ö£¬ÄÇ
ô½«Ôì³É±È½Ï´ó·¶Î§µÄÊý¾Ý¶ªÊ§£¬ËùÒÔredisÌṩÁËÁíÍâÒ»ÖÖ¸ü¼Ó¸ßЧµÄÊý¾Ý¿â±¸·Ý¼°ÔÖÄѻָ´·½Ê½¡£¿ªÆôappend
onlyģʽ֮ºó£¬redis»á°ÑËù½ÓÊÕµ½µÄÿһ´Îд²Ù×÷ÇëÇó¶¼×·¼Óµ½appendonly.aofÎļþÖС£µ±redisÖØÐÂÆô¶¯Ê±£¬»á´Ó¸ÃÎļþ»Ö¸´³öÖ®
ǰµÄ״̬£¬µ«ÊÇÕâÑù»áÔì³Éappendonly.aofÎļþ¹ý´ó£¬ËùÒÔredis»¹Ö§³ÖÁËBGREWRITEAOFÖ¸Áî¶Ôappendonly.aof
½øÐÐÖØÐÂÕûÀí£¬Äã¿ÉÒÔͬʱ¿ªÆôasynchronous dumps ºÍ AOF£»
23£©appendfilename appendonly.aof AOFÎļþÃû³Æ,ĬÈÏΪ"appendonly.aof";
24£©appendfsync everysec RedisÖ§³ÖÈýÖÖͬ²½AOFÎļþµÄ²ßÂÔ: no´ú±í²»½øÐÐͬ²½£¬ÏµÍ³È¥²Ù×÷£¬always´ú±íÿ´ÎÓÐд²Ù×÷¶¼½øÐÐͬ²½£¬everysec´ú±í¶Ôд²Ù×÷½øÐÐÀÛ»ý£¬Ã¿Ãëͬ²½Ò»´Î£¬Ä¬ÈÏ
ÊÇ"everysec"£¬°´ÕÕËٶȺͰ²È«ÕÛÖÐÕâÊÇ×îºÃµÄ¡£
25£©slowlog-log-slower-than 10000 ¼Ç¼³¬¹ýÌØ¶¨Ö´ÐÐʱ¼äµÄÃüÁî¡£Ö´ÐÐʱ¼ä²»°üÀ¨I/O¼ÆË㣬±ÈÈçÁ¬½Ó¿Í»§¶Ë£¬·µ»Ø½á¹ûµÈ£¬Ö»ÊÇÃüÁîÖ´ÐÐʱ¼ä¡£¿ÉÒÔͨ¹ýÁ½¸ö²ÎÊýÉèÖÃslow
log£ºÒ»¸öÊǸæËßRedisÖ´Ðг¬¹ý¶àÉÙʱ¼ä±»¼Ç¼µÄ²ÎÊýslowlog-log-slower-than(΢Ãî)£¬ÁíÒ»¸öÊÇslow
log µÄ³¤¶È¡£µ±Ò»¸öÐÂÃüÁî±»¼Ç¼µÄʱºò×îÔçµÄÃüÁ±»´Ó¶ÓÁÐÖÐÒÆ³ý£¬ÏÂÃæµÄʱ¼äÒÔ΢Ãî΢µ¥Î»£¬Òò´Ë1000000´ú±íÒ»·ÖÖÓ¡£×¢ÒâÖÆ¶¨Ò»¸ö¸ºÊý½«¹Ø±ÕÂýÈÕÖ¾£¬
¶øÉèÖÃΪ0½«Ç¿ÖÆÃ¿¸öÃüÁî¶¼»á¼Ç¼£»
26£©hash-max-zipmap-entries 512 &&
hash-max-zipmap-value 64 µ±hashÖаüº¬³¬¹ýÖ¸¶¨ÔªËظöÊý²¢ÇÒ×î´óµÄÔªËØÃ»Óг¬¹ýÁÙ½çʱ£¬hash½«ÒÔÒ»ÖÖÌØÊâµÄ±àÂ뷽ʽ£¨´ó´ó¼õÉÙÄÚ´æÊ¹Óã©À´´æ´¢£¬ÕâÀï¿ÉÒÔÉèÖÃÕâÁ½¸öÁÙ½ç
Öµ¡£Redis Hash¶ÔÓ¦ValueÄÚ²¿Êµ¼Ê¾ÍÊÇÒ»¸öHashMap£¬Êµ¼ÊÕâÀï»áÓÐ2ÖÖ²»Í¬ÊµÏÖ¡£Õâ¸öHashµÄ³ÉÔ±±È½ÏÉÙʱRedisΪÁ˽ÚÊ¡ÄÚ´æ»á²ÉÓÃÀàËÆÒ»Î¬Êý
×éµÄ·½Ê½À´½ô´Õ´æ´¢£¬¶ø²»»á²ÉÓÃÕæÕýµÄHashMap½á¹¹£¬¶ÔÓ¦µÄvalue redisObjectµÄencodingΪzipmap¡£µ±³ÉÔ±ÊýÁ¿Ôö´óʱ»á×Ô¶¯×ª³ÉÕæÕýµÄHashMap£¬´ËʱencodingΪht£»
27£©list-max-ziplist-entries 512 listÊý¾ÝÀàÐͶàÉÙ½ÚµãÒÔÏ»á²ÉÓÃÈ¥Ö¸ÕëµÄ½ô´Õ´æ´¢¸ñʽ£»
28£©list-max-ziplist-value 64Êý¾ÝÀàÐͽڵãÖµ´óССÓÚ¶àÉÙ×Ö½Ú»á²ÉÓýô´Õ´æ´¢¸ñʽ£»
29£©set-max-intset-entries 512 setÊý¾ÝÀàÐÍÄÚ²¿Êý¾ÝÈç¹ûÈ«²¿ÊÇÊýÖµÐÍ£¬ÇÒ°üº¬¶àÉÙ½ÚµãÒÔÏ»á²ÉÓýô´Õ¸ñʽ´æ´¢£»
30£©zset-max-ziplist-entries 128 zsortÊý¾ÝÀàÐͶàÉÙ½ÚµãÒÔÏ»á²ÉÓÃÈ¥Ö¸ÕëµÄ½ô´Õ´æ´¢¸ñʽ£»
31£©zset-max-ziplist-value 64 zsortÊý¾ÝÀàÐͽڵãÖµ´óССÓÚ¶àÉÙ×Ö½Ú»á²ÉÓýô´Õ´æ´¢¸ñʽ¡£
32£©activerehashing yes Redis½«ÔÚÿ100ºÁÃëʱʹÓÃ1ºÁÃëµÄCPUʱ¼äÀ´¶ÔredisµÄhash±í½øÐÐÖØÐÂhash£¬¿ÉÒÔ½µµÍÄÚ´æµÄʹÓᣵ±ÄãµÄʹÓó¡¾°ÖУ¬Óзdz£ÑϸñµÄ
ʵʱÐÔÐèÒª£¬²»Äܹ»½ÓÊÜRedisʱ²»Ê±µÄ¶ÔÇëÇóÓÐ2ºÁÃëµÄÑӳٵϰ£¬°ÑÕâÏîÅäÖÃΪno¡£Èç¹ûûÓÐÕâôÑϸñµÄʵʱÐÔÒªÇ󣬿ÉÒÔÉèÖÃΪyes£¬ÒÔ±ãÄܹ»¾¡¿É
ÄÜ¿ìµÄÊÍ·ÅÄڴ棻
2.2 RedisµÄ³£ÓÃÊý¾ÝÀàÐÍ
ÓëMemcached½öÖ§³Ö¼òµ¥µÄkey-value½á¹¹µÄÊý¾Ý¼Ç¼²»Í¬£¬RedisÖ§³ÖµÄÊý¾ÝÀàÐÍÒª·á¸»µÃ¶à¡£×îΪ³£ÓõÄÊý¾ÝÀàÐÍÖ÷ÒªÓÉÎå
ÖÖ£ºString¡¢Hash¡¢List¡¢SetºÍSorted Set¡£ÔÚ¾ßÌåÃèÊöÕ⼸ÖÖÊý¾ÝÀàÐÍ֮ǰ£¬ÎÒÃÇÏÈͨ¹ýÒ»ÕÅͼÀ´Á˽âÏÂRedisÄÚ²¿ÄÚ´æ¹ÜÀíÖÐÊÇÈçºÎÃèÊöÕâЩ²»Í¬Êý¾ÝÀàÐ͵ġ£

ͼ1 Redis¶ÔÏó
RedisÄÚ²¿Ê¹ÓÃÒ»¸öredisObject¶ÔÏóÀ´±íʾËùÓеÄkeyºÍvalue¡£redisObject×îÖ÷ÒªµÄÐÅÏ¢Èçͼ1Ëùʾ£ºtype´ú±í
Ò»¸ö value¶ÔÏó¾ßÌåÊǺÎÖÖÊý¾ÝÀàÐÍ£¬encodingÊDz»Í¬Êý¾ÝÀàÐÍÔÚredisÄÚ²¿µÄ´æ´¢·½Ê½£¬±ÈÈ磺type=string´ú±ívalue´æ´¢µÄÊÇÒ»
¸öÆÕͨ×Ö·û´®£¬ÄÇô¶ÔÓ¦µÄencoding¿ÉÒÔÊÇraw»òÕßÊÇint£¬Èç¹ûÊÇintÔò´ú±íʵ¼ÊredisÄÚ²¿Êǰ´ÊýÖµÐÍÀà´æ´¢ºÍ±íʾÕâ¸ö×Ö·û´®µÄ£¬µ±È»Ç°
ÌáÊÇÕâ¸ö×Ö·û´®±¾Éí¿ÉÒÔÓÃÊýÖµ±íʾ£¬±ÈÈç:"123" "456"ÕâÑùµÄ×Ö·û´®¡£ÕâÀïÐèÒªÌØÊâ˵Ã÷Ò»ÏÂvm×ֶΣ¬Ö»Óдò¿ªÁËRedisµÄÐéÄâÄڴ湦ÄÜ£¬´Ë×ֶβŻáÕæÕýµÄ·ÖÅäÄڴ棬¸Ã¹¦ÄÜĬÈÏÊǹرÕ״̬µÄ¡£Í¨¹ý
Figure1ÎÒÃÇ¿ÉÒÔ·¢ÏÖRedisʹÓÃredisObjectÀ´±íʾËùÓеÄkey/valueÊý¾ÝÊDZȽÏÀË·ÑÄÚ´æµÄ£¬µ±È»ÕâЩÄÚ´æ¹ÜÀí³É±¾µÄ¸¶³öÖ÷Òª
Ò²ÊÇΪÁ˸øRedis²»Í¬Êý¾ÝÀàÐÍÌṩһ¸öͳһµÄ¹ÜÀí½Ó¿Ú£¬Êµ¼Ê×÷ÕßÒ²ÌṩÁ˶àÖÖ·½·¨°ïÖúÎÒÃǾ¡Á¿½ÚÊ¡ÄÚ´æÊ¹Óá£ÏÂÃæÎÒÃÇÏÈÀ´ÖðÒ»µÄ·ÖÎöÏÂÕâÎåÖÖÊý¾ÝÀàÐÍ
µÄʹÓúÍÄÚ²¿ÊµÏÖ·½Ê½¡£
1£©String
³£ÓÃÃüÁset/get/decr/incr/mgetµÈ£»
Ó¦Óó¡¾°£ºStringÊÇ×î³£ÓõÄÒ»ÖÖÊý¾ÝÀàÐÍ£¬ÆÕͨµÄkey/value´æ´¢¶¼¿ÉÒÔ¹éΪ´ËÀࣻ
ʵÏÖ·½Ê½£ºStringÔÚredisÄÚ²¿´æ´¢Ä¬ÈϾÍÊÇÒ»¸ö×Ö·û´®£¬±»redisObjectËùÒýÓ㬵±Óöµ½incr¡¢decrµÈ²Ù×÷ʱ»áת³ÉÊýÖµÐͽøÐмÆË㣬´ËʱredisObjectµÄencoding×Ö¶ÎΪint¡£
2£©Hash
³£ÓÃÃüÁhget/hset/hgetallµÈ
Ó¦Óó¡¾°£ºÎÒÃÇÒª´æ´¢Ò»¸öÓû§ÐÅÏ¢¶ÔÏóÊý¾Ý£¬ÆäÖаüÀ¨Óû§ID¡¢Óû§ÐÕÃû¡¢ÄêÁäºÍÉúÈÕ£¬Í¨¹ýÓû§IDÎÒÃÇÏ£Íû»ñÈ¡¸ÃÓû§µÄÐÕÃû»òÕßÄêÁä»òÕßÉúÈÕ£»
ʵÏÖ·½Ê½£ºRedisµÄHashʵ¼ÊÊÇÄÚ²¿´æ´¢µÄValueΪһ¸öHashMap£¬²¢ÌṩÁËÖ±½Ó´æÈ¡Õâ¸öMap³ÉÔ±µÄ½Ó¿Ú¡£Èçͼ2Ëùʾ£¬KeyÊÇÓÃ
»§ ID, valueÊÇÒ»¸öMap¡£Õâ¸öMapµÄkeyÊdzÉÔ±µÄÊôÐÔÃû£¬valueÊÇÊôÐÔÖµ¡£ÕâÑù¶ÔÊý¾ÝµÄÐ޸ĺʹæÈ¡¶¼¿ÉÒÔÖ±½Óͨ¹ýÆäÄÚ²¿MapµÄ
Key(RedisÀï³ÆÄÚ²¿MapµÄkeyΪfield), Ò²¾ÍÊÇͨ¹ý key(Óû§ID) + field(ÊôÐÔ±êÇ©)
¾Í¿ÉÒÔ²Ù×÷¶ÔÓ¦ÊôÐÔÊý¾Ý¡£µ±Ç°HashMapµÄʵÏÖÓÐÁ½ÖÖ·½Ê½£ºµ±HashMapµÄ³ÉÔ±±È½ÏÉÙʱRedisΪÁ˽ÚÊ¡ÄÚ´æ»á²ÉÓÃÀàËÆÒ»Î¬Êý×éµÄ·½Ê½À´½ô´Õ´æ
´¢£¬¶ø²»»á²ÉÓÃÕæÕýµÄHashMap½á¹¹£¬Õâʱ¶ÔÓ¦µÄvalueµÄredisObjectµÄencodingΪzipmap£¬µ±³ÉÔ±ÊýÁ¿Ôö´óʱ»á×Ô¶¯×ª³É
ÕæÕýµÄHashMap,´ËʱencodingΪht¡£

ͼ2 RedisµÄHashÊý¾ÝÀàÐÍ
3£©List
³£ÓÃÃüÁlpush/rpush/lpop/rpop/lrangeµÈ£»
Ó¦Óó¡¾°£ºRedis listµÄÓ¦Óó¡¾°·Ç³£¶à£¬Ò²ÊÇRedis×îÖØÒªµÄÊý¾Ý½á¹¹Ö®Ò»£¬±ÈÈçtwitterµÄ¹Ø×¢ÁÐ±í£¬·ÛË¿ÁбíµÈ¶¼¿ÉÒÔÓÃRedisµÄlist½á¹¹À´ÊµÏÖ£»
ʵÏÖ·½Ê½£ºRedis listµÄʵÏÖΪһ¸öË«ÏòÁ´±í£¬¼´¿ÉÒÔÖ§³Ö·´Ïò²éÕҺͱéÀú£¬¸ü·½±ã²Ù×÷£¬²»¹ý´øÀ´Á˲¿·Ö¶îÍâµÄÄڴ濪Ïú£¬RedisÄÚ²¿µÄºÜ¶àʵÏÖ£¬°üÀ¨·¢ËÍ»º³å¶ÓÁеÈÒ²¶¼ÊÇÓõÄÕâ¸öÊý¾Ý½á¹¹¡£
4£©Set
³£ÓÃÃüÁsadd/spop/smembers/sunionµÈ£»
Ó¦Óó¡¾°£ºRedis set¶ÔÍâÌṩµÄ¹¦ÄÜÓëlistÀàËÆÊÇÒ»¸öÁбíµÄ¹¦ÄÜ£¬ÌØÊâÖ®´¦ÔÚÓÚsetÊÇ¿ÉÒÔ×Ô¶¯ÅÅÖØµÄ£¬µ±ÄãÐèÒª´æ´¢Ò»¸öÁбíÊý¾Ý£¬ÓÖ²»Ï£Íû³öÏÖÖØ¸´Êý¾Ýʱ£¬set
ÊÇÒ»¸öºÜºÃµÄÑ¡Ôñ£¬²¢ÇÒsetÌṩÁËÅжÏij¸ö³ÉÔ±ÊÇ·ñÔÚÒ»¸öset¼¯ºÏÄÚµÄÖØÒª½Ó¿Ú£¬Õâ¸öÒ²ÊÇlistËù²»ÄÜÌṩµÄ£»
ʵÏÖ·½Ê½£ºset µÄÄÚ²¿ÊµÏÖÊÇÒ»¸ö valueÓÀԶΪnullµÄHashMap£¬Êµ¼Ê¾ÍÊÇͨ¹ý¼ÆËãhashµÄ·½Ê½À´¿ìËÙÅÅÖØµÄ£¬ÕâÒ²ÊÇsetÄÜÌṩÅжÏÒ»¸ö³ÉÔ±ÊÇ·ñÔÚ¼¯ºÏÄÚµÄÔÒò¡£
5£©Sorted Set
³£ÓÃÃüÁzadd/zrange/zrem/zcardµÈ£»
Ó¦Óó¡¾°£ºRedis sorted setµÄʹÓó¡¾°ÓësetÀàËÆ£¬Çø±ðÊÇset²»ÊÇ×Ô¶¯ÓÐÐòµÄ£¬¶øsorted
set¿ÉÒÔͨ¹ýÓû§¶îÍâÌṩһ¸öÓÅÏȼ¶(score)µÄ²ÎÊýÀ´Îª³ÉÔ±ÅÅÐò£¬²¢ÇÒÊDzåÈëÓÐÐòµÄ£¬¼´×Ô¶¯ÅÅÐò¡£µ±ÄãÐèÒªÒ»¸öÓÐÐòµÄ²¢ÇÒ²»Öظ´µÄ¼¯ºÏÁÐ±í£¬ÄÇô
¿ÉÒÔÑ¡Ôñsorted setÊý¾Ý½á¹¹£¬±ÈÈçtwitter µÄpublic timeline¿ÉÒÔÒÔ·¢±íʱ¼ä×÷ΪscoreÀ´´æ´¢£¬ÕâÑù»ñȡʱ¾ÍÊÇ×Ô¶¯°´Ê±¼äÅźÃÐòµÄ¡£
ʵÏÖ·½Ê½£ºRedis sorted setµÄÄÚ²¿Ê¹ÓÃHashMapºÍÌøÔ¾±í(SkipList)À´±£Ö¤Êý¾ÝµÄ´æ´¢ºÍÓÐÐò£¬HashMapÀï·ÅµÄÊdzÉÔ±µ½scoreµÄÓ³É䣬¶øÌøÔ¾±íÀï´æ·ÅµÄ
ÊÇËùÓеijÉÔ±£¬ÅÅÐòÒÀ¾ÝÊÇHashMapÀï´æµÄscore,ʹÓÃÌøÔ¾±íµÄ½á¹¹¿ÉÒÔ»ñµÃ±È½Ï¸ßµÄ²éÕÒЧÂÊ£¬²¢ÇÒÔÚʵÏÖÉϱȽϼòµ¥¡£
2.3 RedisµÄ³Ö¾Ã»¯
RedisËäÈ»ÊÇ»ùÓÚÄÚ´æµÄ´æ´¢ÏµÍ³£¬µ«ÊÇËü±¾ÉíÊÇÖ§³ÖÄÚ´æÊý¾ÝµÄ³Ö¾Ã»¯µÄ£¬¶øÇÒÌṩÁ½ÖÖÖ÷ÒªµÄ³Ö¾Ã»¯²ßÂÔ£ºRDB¿ìÕÕºÍAOFÈÕÖ¾¡£ÎÒÃÇ»áÔÚÏÂÎÄ·Ö±ð½éÉÜÕâÁ½ÖÖ²»Í¬µÄ³Ö¾Ã»¯²ßÂÔ¡£
2.3.1 RedisµÄAOFÈÕÖ¾
RedisÖ§³Ö½«µ±Ç°Êý¾ÝµÄ¿ìÕÕ´æ³ÉÒ»¸öÊý¾ÝÎļþµÄ³Ö¾Ã»¯»úÖÆ£¬¼´RDB¿ìÕÕ¡£ÕâÖÖ·½·¨ÊǷdz£ºÃÀí½âµÄ£¬µ«ÊÇÒ»¸ö³ÖÐøÐ´ÈëµÄÊý¾Ý¿âÈçºÎÉú³É¿ìÕÕ
ÄØ£¿Redis½èÖúÁËforkÃüÁîµÄcopy on write»úÖÆ¡£ÔÚÉú³É¿ìÕÕʱ£¬½«µ±Ç°½ø³Ìfork³öÒ»¸ö×Ó½ø³Ì£¬È»ºóÔÚ×Ó½ø³ÌÖÐÑ»·ËùÓеÄÊý¾Ý£¬½«Êý¾Ýд³ÉΪRDBÎļþ¡£
ÎÒÃÇ¿ÉÒÔͨ¹ýRedisµÄsaveÖ¸ÁîÀ´ÅäÖÃRDB¿ìÕÕÉú³ÉµÄʱ»ú£¬±ÈÈçÄã¿ÉÒÔÅäÖõ±10·ÖÖÓÒÔÄÚÓÐ100´ÎдÈë¾ÍÉú³É¿ìÕÕ£¬Ò²¿ÉÒÔÅäÖõ±1СʱÄÚ
ÓÐ 1000´ÎдÈë¾ÍÉú³É¿ìÕÕ£¬Ò²¿ÉÒÔ¶à¸ö¹æÔòÒ»Æðʵʩ¡£ÕâЩ¹æÔòµÄ¶¨Òå¾ÍÔÚRedisµÄÅäÖÃÎļþÖУ¬ÄãÒ²¿ÉÒÔͨ¹ýRedisµÄCONFIG
SETÃüÁîÔÚRedisÔËÐÐʱÉèÖùæÔò£¬²»ÐèÒªÖØÆôRedis¡£
RedisµÄRDBÎļþ²»»á»µµô£¬ÒòΪÆäд²Ù×÷ÊÇÔÚÒ»¸öнø³ÌÖнøÐе쬵±Éú³ÉÒ»¸öеÄRDBÎļþʱ£¬RedisÉú³ÉµÄ×Ó½ø³Ì»áÏȽ«Êý¾Ýдµ½Ò»¸öÁÙ
ʱÎļþÖУ¬È»ºóͨ¹ýÔ×ÓÐÔrenameϵͳµ÷Óý«ÁÙʱÎļþÖØÃüÃûΪRDBÎļþ£¬ÕâÑùÔÚÈκÎʱºò³öÏÖ¹ÊÕÏ£¬RedisµÄRDBÎļþ¶¼×ÜÊÇ¿ÉÓõġ£Í¬
ʱ£¬Redis µÄRDBÎļþÒ²ÊÇRedisÖ÷´Óͬ²½ÄÚ²¿ÊµÏÖÖеÄÒ»»·¡£
µ«ÊÇ£¬ÎÒÃÇ¿ÉÒÔºÜÃ÷ÏԵĿ´µ½£¬RDBÓÐËûµÄ²»×㣬¾ÍÊÇÒ»µ©Êý¾Ý¿â³öÏÖÎÊÌ⣬ÄÇôÎÒÃǵÄRDBÎļþÖб£´æµÄÊý¾Ý²¢²»ÊÇÈ«Ðµģ¬´ÓÉÏ´ÎRDBÎļþÉú³Éµ½
RedisÍ£»úÕâ¶Îʱ¼äµÄÊý¾ÝÈ«²¿¶ªµôÁË¡£ÔÚijЩҵÎñÏ£¬ÕâÊÇ¿ÉÒÔÈÌÊܵģ¬ÎÒÃÇÒ²ÍÆ¼öÕâЩҵÎñʹÓÃRDBµÄ·½Ê½½øÐг־û¯£¬ÒòΪ¿ªÆôRDBµÄ´ú¼Û²¢²»¸ß¡£
µ«ÊǶÔÓÚÁíÍâһЩ¶ÔÊý¾Ý°²È«ÐÔÒªÇ󼫸ߵÄÓ¦Óã¬ÎÞ·¨ÈÝÈÌÊý¾Ý¶ªÊ§µÄÓ¦Óã¬RDB¾ÍÎÞÄÜΪÁ¦ÁË£¬ËùÒÔRedisÒýÈëÁËÁíÒ»¸öÖØÒªµÄ³Ö¾Ã»¯»úÖÆ£ºAOFÈÕÖ¾¡£
2.3.2 RedisµÄAOFÈÕÖ¾
AOFÈÕÖ¾µÄÈ«³ÆÊÇappend only file£¬´ÓÃû×ÖÉÏÎÒÃǾÍÄÜ¿´³öÀ´£¬ËüÊÇÒ»¸ö×·¼ÓдÈëµÄÈÕÖ¾Îļþ¡£ÓëÒ»°ãÊý¾Ý¿âµÄbinlog²»Í¬µÄÊÇ£¬AOFÎļþÊÇ¿Éʶ±ðµÄ´¿Îı¾£¬ËüµÄÄÚÈݾÍÊÇÒ»¸ö¸ö
µÄRedis±ê×¼ÃüÁî¡£µ±È»£¬²¢²»ÊÇ·¢ËÍ·¢RedisµÄËùÓÐÃüÁî¶¼Òª¼Ç¼µ½AOFÈÕÖ¾ÀïÃæ£¬Ö»ÓÐÄÇЩ»áµ¼ÖÂÊý¾Ý·¢ÉúÐ޸ĵÄÃüÁî²Å»á×·¼Óµ½AOFÎļþ¡£ÄÇô
ÿһÌõÐÞ¸ÄÊý¾ÝµÄÃüÁî¶¼Éú³ÉÒ»ÌõÈÕÖ¾£¬ÄÇôAOFÎļþÊDz»ÊÇ»áºÜ´ó£¿´ð°¸Êǿ϶¨µÄ£¬AOFÎļþ»áÔ½À´Ô½´ó£¬ËùÒÔRedisÓÖÌṩÁËÒ»¸ö¹¦ÄÜ£¬½Ð×öAOF
rewrite¡£Æä¹¦ÄܾÍÊÇÖØÐÂÉú³ÉÒ»·ÝAOFÎļþ£¬ÐµÄAOFÎļþÖÐÒ»Ìõ¼Ç¼µÄ²Ù×÷Ö»»áÓÐÒ»´Î£¬¶ø²»ÏñÒ»·ÝÀÏÎļþÄÇÑù£¬¿ÉÄܼǼÁ˶Ôͬһ¸öÖµµÄ¶à´Î²Ù
×÷¡£ÆäÉú³É¹ý³ÌºÍRDBÀàËÆ£¬Ò²ÊÇforkÒ»¸ö½ø³Ì£¬Ö±½Ó±éÀúÊý¾Ý£¬Ð´ÈëеÄAOFÁÙʱÎļþ¡£ÔÚдÈëÐÂÎļþµÄ¹ý³ÌÖУ¬ËùÓеÄд²Ù×÷ÈÕÖ¾»¹ÊÇ»áдµ½ÔÀ´ÀϵÄ
AOFÎļþÖУ¬Í¬Ê±»¹»á¼Ç¼ÔÚÄڴ滺³åÇøÖС£µ±ÖØÍê²Ù×÷Íê³Éºó£¬»á½«ËùÓлº³åÇøÖеÄÈÕÖ¾Ò»´ÎÐÔдÈëµ½ÁÙʱÎļþÖС£È»ºóµ÷ÓÃÔ×ÓÐÔµÄrenameÃüÁîÓÃеÄ
AOFÎļþÈ¡´úÀϵÄAOFÎļþ¡£
AOFÊÇÒ»¸öдÎļþ²Ù×÷£¬ÆäÄ¿µÄÊǽ«²Ù×÷ÈÕ־дµ½´ÅÅÌÉÏ£¬ËùÒÔËüҲͬÑù»áÓöµ½ÎÒÃÇÉÏÃæËµµÄд²Ù×÷µÄ5¸öÁ÷³Ì¡£ÄÇôдAOFµÄ²Ù×÷°²È«ÐÔÓÖÓжà¸ßÄØ¡£
ʵ¼ÊÉÏÕâÊÇ¿ÉÒÔÉèÖõģ¬ÔÚRedisÖжÔAOFµ÷ÓÃwrite(2)дÈëºó£¬ºÎʱÔÙµ÷ÓÃfsync½«Æäдµ½´ÅÅÌÉÏ£¬Í¨¹ýappendfsyncÑ¡ÏîÀ´¿Ø
ÖÆ£¬ÏÂÃæ appendfsyncµÄÈý¸öÉèÖÃÏ°²È«Ç¿¶ÈÖð½¥±äÇ¿¡£
1£©appendfsync no
µ±ÉèÖÃappendfsyncΪnoµÄʱºò£¬Redis²»»áÖ÷¶¯µ÷ÓÃfsyncÈ¥½«AOFÈÕÖ¾ÄÚÈÝͬ²½µ½´ÅÅÌ£¬ËùÒÔÕâÒ»ÇоÍÍêÈ«ÒÀÀµÓÚ²Ù×÷ϵͳµÄµ÷ÊÔÁË¡£¶Ô´ó¶àÊýLinux²Ù×÷ϵͳ£¬ÊÇÿ30Ãë½øÐÐÒ»´Îfsync£¬½«»º³åÇøÖеÄÊý¾Ýдµ½´ÅÅÌÉÏ¡£
2£©appendfsync everysec
µ±ÉèÖÃappendfsyncΪeverysecµÄʱºò£¬Redis»áĬÈÏÿ¸ôÒ»Ãë½øÐÐÒ»´Îfsyncµ÷Ó㬽«»º³åÇøÖеÄÊý¾Ýдµ½´ÅÅÌ¡£µ«Êǵ±ÕâÒ»
´ÎµÄ fsyncµ÷ÓÃʱ³¤³¬¹ý1Ãëʱ¡£Redis»á²ÉÈ¡ÑÓ³ÙfsyncµÄ²ßÂÔ£¬ÔÙµÈÒ»ÃëÖÓ¡£Ò²¾ÍÊÇÔÚÁ½ÃëºóÔÙ½øÐÐfsync£¬ÕâÒ»´ÎµÄfsync¾Í²»¹Ü»áÖ´Ðжà
³¤Ê±¼ä¶¼»á½øÐС£ÕâʱºòÓÉÓÚÔÚfsyncʱÎļþÃèÊö·û»á±»×èÈû£¬ËùÒÔµ±Ç°µÄд²Ù×÷¾Í»á×èÈû¡£ËùÒÔ½áÂÛ¾ÍÊÇ£¬ÔÚ¾ø´ó¶àÊýÇé¿öÏ£¬Redis»áÿ¸ôÒ»Ãë½øÐÐÒ»
´Îfsync¡£ÔÚ×µÄÇé¿öÏ£¬Á½ÃëÖÓ»á½øÐÐÒ»´Îfsync²Ù×÷¡£ÕâÒ»²Ù×÷ÔÚ´ó¶àÊýÊý¾Ý¿âϵͳÖб»³ÆÎªgroup
commit£¬¾ÍÊÇ×éºÏ¶à´Îд²Ù×÷µÄÊý¾Ý£¬Ò»´ÎÐÔ½«ÈÕ־дµ½´ÅÅÌ¡£
3£©appednfsync always
µ±ÉèÖÃappendfsyncΪalwaysʱ£¬Ã¿Ò»´Îд²Ù×÷¶¼»áµ÷ÓÃÒ»´Îfsync£¬ÕâʱÊý¾ÝÊÇ×ȫµÄ£¬µ±È»£¬ÓÉÓÚÿ´Î¶¼»áÖ´ÐÐfsync£¬ËùÒÔÆäÐÔÄÜÒ²»áÊܵ½Ó°Ïì¡£
3. MemcachedºÍRedis¹Ø¼ü¼¼Êõ¶Ô±È
×÷ΪÄÚ´æÊý¾Ý»º³åϵͳ£¬MemcachedºÍRedis¾ù¾ßÓкܸߵÄÐÔÄÜ£¬µ«ÊÇÁ½ÕßÔڹؼüʵÏÖ¼¼ÊõÉϾßÓкܴó²îÒ죬ÕâÖÖ²îÒì¾ö¶¨ÁËÁ½Õß¾ßÓв»Í¬µÄÌØµãºÍ²»Í¬µÄÊÊÓÃÌõ¼þ¡£ÏÂÃæÎÒÃÇ»á¶ÔÁ½ÕߵĹؼü¼¼Êõ½øÐÐһЩ¶Ô±È£¬ÒÔ´ËÀ´½ÒʾÁ½ÕߵIJîÒì¡£
3.1 MemcachedºÍRedisµÄÄÚ´æ¹ÜÀí»úÖÆ¶Ô±È
¶ÔÓÚÏñRedisºÍMemcachedÕâÖÖ»ùÓÚÄÚ´æµÄÊý¾Ý¿âϵͳÀ´Ëµ£¬ÄÚ´æ¹ÜÀíµÄЧÂʸߵÍÊÇÓ°ÏìϵͳÐÔÄܵĹؼüÒòËØ¡£´«Í³CÓïÑÔÖеÄ
malloc/freeº¯ÊýÊÇ×î³£ÓõķÖÅäºÍÊÍ·ÅÄÚ´æµÄ·½·¨£¬µ«ÊÇÕâÖÖ·½·¨´æÔÚןܴóµÄȱÏÝ£ºÊ×ÏÈ£¬¶ÔÓÚ¿ª·¢ÈËÔ±À´Ëµ²»Æ¥ÅäµÄmallocºÍfreeÈÝÒ×
Ôì³ÉÄÚ´æÐ¹Â¶£»Æä´Î£¬Æµ·±µ÷ÓûáÔì³É´óÁ¿ÄÚ´æË鯬ÎÞ·¨»ØÊÕÖØÐÂÀûÓ㬽µµÍÄÚ´æÀûÓÃÂÊ£»×îºó£¬×÷Ϊϵͳµ÷Óã¬Æäϵͳ¿ªÏúÔ¶Ô¶´óÓÚÒ»°ãº¯Êýµ÷Óá£ËùÒÔ£¬ÎªÁËÌá
¸ßÄÚ´æµÄ¹ÜÀíЧÂÊ£¬¸ßЧµÄÄÚ´æ¹ÜÀí·½°¸¶¼²»»áÖ±½ÓʹÓÃmalloc/freeµ÷Óá£RedisºÍMemcached¾ùʹÓÃÁË×ÔÉíÉè¼ÆµÄÄÚ´æ¹ÜÀí»úÖÆ£¬µ«ÊÇ
ʵÏÖ·½·¨´æÔںܴóµÄ²îÒ죬ÏÂÃæ½«»á¶ÔÁ½ÕßµÄÄÚ´æ¹ÜÀí»úÖÆ·Ö±ð½øÐнéÉÜ¡£
3.1.1 MemcachedµÄÄÚ´æ¹ÜÀí»úÖÆ
MemcachedĬÈÏʹÓÃSlab Allocation»úÖÆ¹ÜÀíÄڴ棬ÆäÖ÷Ҫ˼ÏëÊǰ´ÕÕÔ¤Ïȹ涨µÄ´óС£¬½«·ÖÅäµÄÄÚ´æ·Ö¸î³ÉÌØ¶¨³¤¶ÈµÄ¿éÒÔ´æ´¢ÏàÓ¦³¤¶ÈµÄkey-valueÊý¾Ý¼Ç¼£¬ÒÔÍê
È«½â¾öÄÚ´æË鯬ÎÊÌâ¡£Slab Allocation»úÖÆÖ»Îª´æ´¢ÍⲿÊý¾Ý¶øÉè¼Æ£¬Ò²¾ÍÊÇ˵ËùÓеÄkey-valueÊý¾Ý¶¼´æ´¢ÔÚSlab
AllocationϵͳÀ¶øMemcachedµÄÆäËüÄÚ´æÇëÇóÔòͨ¹ýÆÕͨµÄmalloc/freeÀ´ÉêÇ룬ÒòΪÕâЩÇëÇóµÄÊýÁ¿ºÍƵÂʾö¶¨ÁËËüÃDz»»á¶Ô
Õû¸öϵͳµÄÐÔÄÜÔì³ÉÓ°Ïì¡£
Slab AllocationµÄÔÀíÏ൱¼òµ¥¡£Èçͼ3Ëùʾ£¬ËüÊ×ÏÈ´Ó²Ù×÷ϵͳÉêÇëÒ»´ó¿éÄڴ棬²¢½«Æä·Ö¸î³É¸÷ÖֳߴçµÄ¿éChunk£¬²¢°Ñ³ß´çÏàͬµÄ¿é·Ö³É×é
Slab Class¡£ÆäÖУ¬Chunk¾ÍÊÇÓÃÀ´´æ´¢key-valueÊý¾ÝµÄ×îСµ¥Î»¡£Ã¿¸öSlab ClassµÄ´óС£¬¿ÉÒÔÔÚMemcachedÆô¶¯µÄʱºòͨ¹ýÖÆ¶¨Growth
FactorÀ´¿ØÖÆ¡£¼Ù¶¨Figure 1ÖÐGrowth FactorµÄȡֵΪ1.25£¬ËùÒÔÈç¹ûµÚÒ»×éChunkµÄ´óСΪ88¸ö×Ö½Ú£¬µÚ¶þ×éChunkµÄ´óС¾ÍΪ112¸ö×Ö½Ú£¬ÒÀ´ËÀàÍÆ¡£

ͼ3 MemcachedÄÚ´æ¹ÜÀí¼Ü¹¹
µ±Memcached½ÓÊÕµ½¿Í»§¶Ë·¢Ë͹ýÀ´µÄÊý¾ÝʱÊ×ÏÈ»á¸ù¾ÝÊÕµ½Êý¾ÝµÄ´óСѡÔñÒ»¸ö×îºÏÊʵÄSlab
Class£¬È»ºóͨ¹ý²éѯMemcached±£´æ×ŵĸÃSlab ClassÄÚ¿ÕÏÐChunkµÄÁбí¾Í¿ÉÒÔÕÒµ½Ò»¸ö¿ÉÓÃÓÚ´æ´¢Êý¾ÝµÄChunk¡£µ±Ò»ÌõÊý¾Ý¿â¹ýÆÚ»òÕß¶ªÆúʱ£¬¸Ã¼Ç¼ËùÕ¼ÓõÄChunk¾Í¿ÉÒÔ»ØÊÕ£¬ÖØÐÂÌí
¼Óµ½¿ÕÏÐÁбíÖС£´ÓÒÔÉϹý³ÌÎÒÃÇ¿ÉÒÔ¿´³öMemcachedµÄÄÚ´æ¹ÜÀíÖÆÐ§Âʸߣ¬¶øÇÒ²»»áÔì³ÉÄÚ´æË鯬£¬µ«ÊÇËü×î´óµÄȱµã¾ÍÊǻᵼÖ¿ռäÀË·Ñ¡£ÒòΪÿ¸ö
Chunk¶¼·ÖÅäÁËÌØ¶¨³¤¶ÈµÄÄÚ´æ¿Õ¼ä£¬ËùÒԱ䳤Êý¾ÝÎÞ·¨³ä·ÖÀûÓÃÕâЩ¿Õ¼ä¡£Èçͼ 4Ëùʾ£¬½«100¸ö×Ö½ÚµÄÊý¾Ý»º´æµ½128¸ö×Ö½ÚµÄChunkÖУ¬Ê£ÓàµÄ28¸ö×Ö½Ú¾ÍÀ˷ѵôÁË¡£

ͼ4 MemcachedµÄ´æ´¢¿Õ¼äÀË·Ñ
3.1.2 RedisµÄÄÚ´æ¹ÜÀí»úÖÆ
RedisµÄÄÚ´æ¹ÜÀíÖ÷Ҫͨ¹ýÔ´ÂëÖÐzmalloc.hºÍzmalloc.cÁ½¸öÎļþÀ´ÊµÏֵġ£RedisΪÁË·½±ãÄÚ´æµÄ¹ÜÀí£¬ÔÚ·ÖÅäÒ»¿éÄÚ´æÖ®
ºó£¬»á½«Õâ¿éÄÚ´æµÄ´óС´æÈëÄÚ´æ¿éµÄÍ·²¿¡£Èçͼ 5Ëùʾ£¬real_ptrÊÇredisµ÷ÓÃmallocºó·µ»ØµÄÖ¸Õë¡£redis½«ÄÚ´æ¿éµÄ´óСsize´æÈëÍ·²¿£¬sizeËùÕ¼¾ÝµÄÄÚ´æ´óСÊÇÒÑÖªµÄ£¬Îª
size_tÀàÐ͵ij¤¶È£¬È»ºó·µ»Øret_ptr¡£µ±ÐèÒªÊÍ·ÅÄÚ´æµÄʱºò£¬ret_ptr±»´«¸øÄÚ´æ¹ÜÀí³ÌÐò¡£Í¨¹ýret_ptr£¬³ÌÐò¿ÉÒÔºÜÈÝÒ×µÄËã³ö
real_ptrµÄÖµ£¬È»ºó½«real_ptr´«¸øfreeÊÍ·ÅÄÚ´æ¡£

ͼ5 Redis¿é·ÖÅä
Redisͨ¹ý¶¨ÒåÒ»¸öÊý×éÀ´¼Ç¼ËùÓеÄÄÚ´æ·ÖÅäÇé¿ö£¬Õâ¸öÊý×éµÄ³¤¶ÈΪZMALLOC_MAX_ALLOC_STAT¡£Êý×éµÄÿһ¸öÔªËØ´ú±íµ±Ç°
³ÌÐòËù·ÖÅäµÄÄÚ´æ¿éµÄ¸öÊý£¬ÇÒÄÚ´æ¿éµÄ´óСΪ¸ÃÔªËØµÄϱꡣÔÚÔ´ÂëÖУ¬Õâ¸öÊý×éΪzmalloc_allocations¡£
zmalloc_allocations[16]´ú±íÒѾ·ÖÅäµÄ³¤¶ÈΪ16bytesµÄÄÚ´æ¿éµÄ¸öÊý¡£zmalloc.cÖÐÓÐÒ»¸ö¾²Ì¬±äÁ¿
used_memoryÓÃÀ´¼Ç¼µ±Ç°·ÖÅäµÄÄÚ´æ×Ü´óС¡£ËùÒÔ£¬×ܵÄÀ´¿´£¬Redis²ÉÓõÄÊǰü×°µÄmallc/free£¬Ïà½ÏÓÚMemcachedµÄÄÚ´æ
¹ÜÀí·½·¨À´Ëµ£¬Òª¼òµ¥ºÜ¶à¡£
3.2 RedisºÍMemcachedµÄ¼¯ÈºÊµÏÖ»úÖÆ¶Ô±È
MemcachedÊÇÈ«ÄÚ´æµÄÊý¾Ý»º³åϵͳ£¬RedisËäȻ֧³ÖÊý¾ÝµÄ³Ö¾Ã»¯£¬µ«ÊÇÈ«ÄÚ´æ±Ï¾¹²ÅÊÇÆä¸ßÐÔÄܵı¾ÖÊ¡£×÷Ϊ»ùÓÚÄÚ´æµÄ´æ´¢ÏµÍ³À´Ëµ£¬»ú
Æ÷ÎïÀíÄÚ´æµÄ´óС¾ÍÊÇϵͳÄܹ»ÈÝÄɵÄ×î´óÊý¾ÝÁ¿¡£Èç¹ûÐèÒª´¦ÀíµÄÊý¾ÝÁ¿³¬¹ýÁ˵¥Ì¨»úÆ÷µÄÎïÀíÄÚ´æ´óС£¬¾ÍÐèÒª¹¹½¨·Ö²¼Ê½¼¯ÈºÀ´À©Õ¹´æ´¢ÄÜÁ¦¡£
3.2.1 MemcachedµÄ·Ö²¼Ê½´æ´¢
Memcached±¾Éí²¢²»Ö§³Ö·Ö²¼Ê½£¬Òò´ËÖ»ÄÜÔÚ¿Í»§¶Ëͨ¹ýÏñÒ»ÖÂÐÔ¹þÏ£ÕâÑùµÄ·Ö²¼Ê½Ëã·¨À´ÊµÏÖMemcachedµÄ·Ö²¼Ê½´æ´¢¡£Í¼6
¸ø³öÁËMemcachedµÄ·Ö²¼Ê½´æ´¢ÊµÏּܹ¹¡£µ±¿Í»§¶ËÏòMemcached¼¯Èº·¢ËÍÊý¾Ý֮ǰ£¬Ê×ÏÈ»áͨ¹ýÄÚÖõķֲ¼Ê½Ëã·¨¼ÆËã³ö¸ÃÌõÊý¾ÝµÄÄ¿±ê½Úµã£¬
È»ºóÊý¾Ý»áÖ±½Ó·¢Ë͵½¸Ã½ÚµãÉÏ´æ´¢¡£µ«¿Í»§¶Ë²éѯÊý¾Ýʱ£¬Í¬ÑùÒª¼ÆËã³ö²éѯÊý¾ÝËùÔڵĽڵ㣬ȻºóÖ±½ÓÏò¸Ã½Úµã·¢ËͲéѯÇëÇóÒÔ»ñÈ¡Êý¾Ý¡£

ͼ6 Memcached¿Í»§¶Ë·Ö²¼Ê½´æ´¢ÊµÏÖ
3.2.2 RedisµÄ·Ö²¼Ê½´æ´¢
Ïà½ÏÓÚMemcachedÖ»ÄܲÉÓÿͻ§¶ËʵÏÖ·Ö²¼Ê½´æ´¢£¬Redis¸üÆ«ÏòÓÚÔÚ·þÎñÆ÷¶Ë¹¹½¨·Ö²¼Ê½´æ´¢¡£¾¡¹ÜRedisµ±Ç°ÒѾ·¢²¼µÄÎȶ¨°æ±¾»¹Ã»
ÓÐÌí¼Ó·Ö²¼Ê½´æ´¢¹¦ÄÜ£¬µ«Redis¿ª·¢°æÖÐÒѾ¾ß±¸ÁËRedis ClusterµÄ»ù±¾¹¦ÄÜ¡£Ô¤¼ÆÔÚ2.6°æ±¾Ö®ºó£¬Redis¾Í»á·¢²¼Íêȫ֧³Ö·Ö²¼Ê½µÄÎȶ¨°æ±¾£¬Ê±¼ä²»ÍíÓÚ2012Äêµ×¡£ÏÂÃæÎÒÃÇ»á¸ù¾Ý¿ª·¢°æÖеÄʵ
ÏÖ£¬¼òµ¥½éÉÜÒ»ÏÂRedis ClusterµÄºËÐÄ˼Ïë¡£
Redis ClusterÊÇÒ»¸öʵÏÖÁË·Ö²¼Ê½ÇÒÔÊÐíµ¥µã¹ÊÕϵÄRedis¸ß¼¶°æ±¾£¬ËüûÓÐÖÐÐĽڵ㣬¾ßÓÐÏßÐÔ¿ÉÉìËõµÄ¹¦ÄÜ¡£Í¼7¸ø³öRedis
ClusterµÄ·Ö²¼Ê½´æ´¢¼Ü¹¹£¬ÆäÖнڵãÓë½ÚµãÖ®¼äͨ¹ý¶þ½øÖÆÐÒé½øÐÐͨÐÅ£¬½ÚµãÓë¿Í»§¶ËÖ®¼äͨ¹ýasciiÐÒé½øÐÐͨÐÅ¡£ÔÚÊý¾ÝµÄ·ÅÖòßÂÔ
ÉÏ£¬Redis Cluster½«Õû¸ökeyµÄÊýÖµÓò·Ö³É4096¸ö¹þÏ£²Û£¬Ã¿¸ö½ÚµãÉÏ¿ÉÒÔ´æ´¢Ò»¸ö»ò¶à¸ö¹þÏ£²Û£¬Ò²¾ÍÊÇ˵µ±Ç°Redis
ClusterÖ§³ÖµÄ×î´ó½ÚµãÊý¾ÍÊÇ4096¡£Redis ClusterʹÓõķֲ¼Ê½Ëã·¨Ò²ºÜ¼òµ¥£ºcrc16(
key ) % HASH_SLOTS_NUMBER¡£

ͼ7 Redis·Ö²¼Ê½¼Ü¹¹
ΪÁ˱£Ö¤µ¥µã¹ÊÕÏϵÄÊý¾Ý¿ÉÓÃÐÔ£¬Redis ClusterÒýÈëÁËMaster½ÚµãºÍSlave½Úµã¡£Èçͼ4Ëùʾ£¬ÔÚRedis
ClusterÖУ¬Ã¿¸öMaster½Úµã¶¼»áÓжÔÓ¦µÄÁ½¸öÓÃÓÚÈßÓàµÄSlave½Úµã¡£ÕâÑùÔÚÕû¸ö¼¯ÈºÖУ¬ÈÎÒâÁ½¸ö½ÚµãµÄå´»ú¶¼²»»áµ¼ÖÂÊý¾ÝµÄ²»¿ÉÓᣵ±
Master½ÚµãÍ˳öºó£¬¼¯Èº»á×Ô¶¯Ñ¡ÔñÒ»¸öSlave½Úµã³ÉΪеÄMaster½Úµã¡£

ͼ8 Redis ClusterÖеÄMaster½ÚµãºÍSlave½Úµã
3.3 RedisºÍMemcachedÕûÌå¶Ô±È
RedisµÄ×÷ÕßSalvatore SanfilippoÔø¾¶ÔÕâÁ½ÖÖ»ùÓÚÄÚ´æµÄÊý¾Ý´æ´¢ÏµÍ³½øÐйý±È½Ï£¬×ÜÌåÀ´¿´»¹ÊDZȽϿ͹۵ģ¬ÏÖ×ܽáÈçÏ£º
1£©ÐÔÄܶԱȣºÓÉÓÚRedisֻʹÓõ¥ºË£¬¶øMemcached¿ÉÒÔʹÓöàºË£¬ËùÒÔÆ½¾ùÿһ¸öºËÉÏRedisÔڴ洢СÊý¾Ýʱ±ÈMemcachedÐÔ
Äܸü¸ß¡£¶øÔÚ100kÒÔÉϵÄÊý¾ÝÖУ¬MemcachedÐÔÄÜÒª¸ßÓÚRedis£¬ËäÈ»Redis×î½üÒ²ÔÚ´æ´¢´óÊý¾ÝµÄÐÔÄÜÉϽøÐÐÓÅ»¯£¬µ«ÊÇ±ÈÆð
Memcached£¬»¹ÊÇÉÔÓÐÑ·É«¡£
2£©ÄÚ´æÊ¹ÓÃЧÂʶԱȣºÊ¹Óüòµ¥µÄkey-value´æ´¢µÄ»°£¬MemcachedµÄÄÚ´æÀûÓÃÂʸü¸ß£¬¶øÈç¹ûRedis²ÉÓÃhash½á¹¹À´×ökey-value´æ´¢£¬ÓÉÓÚÆä×éºÏʽµÄѹËõ£¬ÆäÄÚ´æÀûÓÃÂÊ»á¸ßÓÚMemcached¡£
3£©RedisÖ§³Ö·þÎñÆ÷¶ËµÄÊý¾Ý²Ù×÷£ºRedisÏà±ÈMemcachedÀ´Ëµ£¬ÓµÓиü¶àµÄÊý¾Ý½á¹¹ºÍ²¢Ö§³Ö¸ü·á¸»µÄÊý¾Ý²Ù×÷£¬Í¨³£ÔÚ
Memcached ÀÄãÐèÒª½«Êý¾ÝÄõ½¿Í»§¶ËÀ´½øÐÐÀàËÆµÄÐÞ¸ÄÔÙset»ØÈ¥¡£Õâ´ó´óÔö¼ÓÁËÍøÂçIOµÄ´ÎÊýºÍÊý¾ÝÌå»ý¡£ÔÚRedisÖУ¬ÕâЩ¸´ÔӵIJÙ×÷ͨ³£ºÍÒ»°ãµÄ
GET/SETÒ»Ñù¸ßЧ¡£ËùÒÔ£¬Èç¹ûÐèÒª»º´æÄܹ»Ö§³Ö¸ü¸´ÔӵĽṹºÍ²Ù×÷£¬ÄÇôRedis»áÊDz»´íµÄÑ¡Ôñ¡£ |