ÔÚһЩÍøÂç·þÎñµÄϵͳÖУ¬Redis µÄÐÔÄÜ£¬¿ÉÄÜÊÇ±È MySQL µÈÓ²ÅÌÊý¾Ý¿âµÄÐÔÄܸüÖØÒªµÄ¿ÎÌâ¡£±ÈÈç΢²©£¬°ÑÈȵã΢²©[1]£¬×îеÄÓû§¹Øϵ£¬¶¼´æ´¢ÔÚ Redis ÖУ¬´óÁ¿µÄ²éѯ»÷ÖÐ Redis£¬¶ø²»×ß MySQL¡£
ÄÇô£¬Õë¶Ô Redis ·þÎñ£¬ÎÒÃÇÄÜ×öÄÄЩÐÔÄÜÓÅ»¯ÄØ£¿»òÕß˵£¬Ó¦¸Ã±ÜÃâÄÄЩÐÔÄÜÀË·ÑÄØ£¿
ÔÚÌÖÂÛÓÅ»¯Ö®Ç°£¬ÎÒÃÇÐèÒªÖªµÀ£¬Redis ·þÎñ±¾Éí¾ÍÓÐһЩÌØÐÔ£¬±ÈÈçµ¥Ïß³ÌÔËÐС£³ý·ÇÐÞ¸Ä Redis µÄÔ´´úÂ룬²»È»ÕâЩÌØÐÔ£¬¾ÍÊÇÎÒÃÇ˼¿¼ÐÔÄÜÓÅ»¯µÄ»ù±¾Ãæ¡£
ÄÇô£¬ÓÐÄÄЩ Redis »ù±¾ÌØÐÔÐèÒªÎÒÃÇ¿¼ÂÇÄØ£¿Redis µÄÏîÄ¿½éÉÜÖиÅÀ¨ÁËËüÌØÐÔ£º
Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported.
Ê×ÏÈ£¬Redis ʹÓòÙ×÷ϵͳÌṩµÄÐéÄâÄÚ´æÀ´´æ´¢Êý¾Ý¡£¶øÇÒ£¬Õâ¸ö²Ù×÷ϵͳһ°ã¾ÍÊÇÖ¸ Unix¡£Windows ÉÏÒ²ÄÜÔËÐÐ Redis£¬µ«ÊÇÐèÒªÌØÊâ´¦Àí¡£Èç¹ûÄãµÄ²Ù×÷ϵͳʹÓý»»»¿Õ¼ä£¬ÄÇô Redis µÄÊý¾Ý¿ÉÄܻᱻʵ¼Ê±£´æÔÚÓ²ÅÌÉÏ¡£
Æä´Î£¬Redis Ö§³Ö³Ö¾Ã»¯£¬¿ÉÒÔ°ÑÊý¾Ý±£´æÔÚÓ²ÅÌÉÏ¡£ºÜ¶àʱºò£¬ÎÒÃÇҲȷʵÓбØÒª½øÐг־û¯À´ÊµÏÖ±¸·Ý£¬Êý¾Ý»Ö¸´µÈÐèÇó¡£µ«³Ö¾Ã»¯²»»áƾ¿Õ·¢Éú£¬ËüÒ²»áÕ¼ÓÃÒ»²¿·Ö×ÊÔ´¡£
µÚÈý£¬Redis ÊÇÓà key-value µÄ·½Ê½À´¶ÁдµÄ£¬¶ø value ÖÐÓÖ¿ÉÒÔÊǺܶ಻ͬÖÖÀàµÄÊý¾Ý£»¸ü½øÒ»²½£¬Ò»¸öÊý¾ÝÀàÐ͵ĵײ㻹Óб»´æ´¢Îª²»Í¬µÄ½á¹¹¡£²»Í¬µÄ´æ´¢½á¹¹¾ö¶¨ÁËÊý¾ÝÔöɾ¸Ä²éµÄ¸´ÔÓ¶ÈÒÔ¼°ÐÔÄÜ¿ªÏú¡£
×îºó£¬ÔÚÉÏÃæµÄ½éÉÜÖÐûÓÐÌáµ½µÄÊÇ£¬Redis ´ó¶àÊýʱºòÊǵ¥Ïß³ÌÔËÐÐ[2]µÄ£¨single-threaded)£¬¼´Í¬Ò»Ê±¼äÖ»Õ¼ÓÃÒ»¸ö CPU£¬Ö»ÄÜÓÐÒ»¸öÖ¸ÁîÔÚÔËÐУ¬²¢ÐжÁдÊDz»´æÔڵġ£ºÜ¶à²Ù×÷´øÀ´µÄÑÓ³ÙÎÊÌ⣬¶¼¿ÉÒÔÔÚÕâÀïÕÒµ½´ð°¸¡£
¹ØÓÚ×îºóÕâ¸öÌØÐÔ£¬ÎªÊ²Ã´ Redis Êǵ¥Ï̵߳ģ¬È´ÄÜÓкܺõÄÐÔÄÜ(¸ù¾Ý Amdahl¡¯s Law£¬ÓÅ»¯ºÄʱռ±È´óµÄ¹ý³Ì£¬²Å¸üÓÐÒâÒå)£¬Á½¾ä»°¸ÅÀ¨ÊÇ£ºRedis ÀûÓÃÁ˶à· I/O ¸´ÓûúÖÆ[3]£¬´¦Àí¿Í»§¶ËÇëÇóʱ£¬²»»á×èÈûÖ÷Ị̈߳»Redis µ¥´¿Ö´ÐУ¨´ó¶àÊýÖ¸Áһ¸öÖ¸Áî²»µ½ 1 ΢Ãë[4]£¬Èç´Ë£¬µ¥ºË CPU Ò»Ãë¾ÍÄÜ´¦Àí 1 °ÙÍò¸öÖ¸Á´ó¸Å¶ÔӦ׿¸Ê®Íò¸öÇëÇó°É£©£¬Óò»×ÅʵÏÖ¶àỊ̈߳¨ÍøÂç²ÅÊÇÆ¿¾±[5]£©¡£
Redis µÄ¹Ù·½²©¿ÍÔÚ¼¸¸öµØ·½¶¼Ëµ£¬ÐÔÄÜÆ¿¾±¸ü¿ÉÄÜÊÇÍøÂç[6]£¬ÄÇôÎÒÃÇÈçºÎÓÅ»¯ÍøÂçÉϵÄÑÓʱÄØ£¿
Ê×ÏÈ£¬Èç¹ûÄãÃÇʹÓõ¥»ú²¿Êð£¨Ó¦Ó÷þÎñºÍ Redis ÔÚͬһ̨»úÆ÷ÉÏ£©µÄ»°£¬Ê¹Óà Unix ½ø³Ì¼äͨѶÀ´ÇëÇó Redis ·þÎñ£¬ËÙ¶È±È localhost ¾ÖÓòÍø£¨Ñ§Ãû loopback£©¸ü¿ì¡£¹Ù·½Îĵµ[7]ÊÇÕâô˵µÄ£¬ÏëÒ»Ï룬ÀíÂÛÉÏÒ²Ó¦¸ÃÊÇÕâÑùµÄ¡£
µ«ºÜ¶à¹«Ë¾µÄÒµÎñ¹æÄ£²»Êǵ¥»ú²¿ÊðÄÜÖ§³ÅµÄ£¬ËùÒÔ»¹ÊǵÃÓà TCP¡£
Redis ¿Í»§¶ËºÍ·þÎñÆ÷µÄͨѶһ°ãʹÓà TCP ³¤Á´½Ó¡£Èç¹û¿Í»§¶Ë·¢ËÍÇëÇóºóÐèÒªµÈ´ý Redis ·µ»Ø½á¹ûÔÙ·¢ËÍÏÂÒ»¸öÖ¸Á¿Í»§¶ËºÍ Redis µÄ¶à¸öÇëÇó¾Í¹¹³ÉÏÂÃæµÄ¹Øϵ£º
£¨±¸×¢£ºÈç¹û²»ÊÇÄãÒª·¢Ë굀 key Ìر𳤣¬Ò»¸ö TCP °üÍêÈ«ÄÜ·ÅÏ Redis Ö¸ÁËùÒÔÖ»»ÁËÒ»¸ö push °ü£©
ÕâÑùÕâÁ½´ÎÇëÇóÖУ¬¿Í»§¶Ë¶¼ÐèÒª¾ÀúÒ»¶ÎÍøÂç´«Êäʱ¼ä¡£
µ«Èç¹ûÓпÉÄÜ£¬ÍêÈ«¿ÉÒÔʹÓà multi-key ÀàµÄÖ¸ÁîÀ´ºÏ²¢ÇëÇ󣬱ÈÈçÁ½¸ö?GET key
¿ÉÒÔÓÃMGET key1 key2
ºÏ²¢¡£ÕâÑùÔÚʵ¼ÊͨѶÖУ¬ÇëÇóÊýÒ²¼õÉÙÁË£¬ÑÓʱ×ÔÈ»µÃµ½ºÃת¡£
Èç¹û²»ÄÜÓà multi-key Ö¸ÁîÀ´ºÏ²¢£¬±ÈÈçÒ»¸ö?SET
£¬Ò»¸öGET
ÎÞ·¨ºÏ²¢¡£Ôõô°ì£¿
Redis ÖÐÓÐÖÁÉÙÕâÑùÁ½¸ö·½·¨Äܺϲ¢¶à¸öÖ¸Áîµ½Ò»¸ö request ÖУ¬Ò»¸öÊÇ?MULTI/EXEC
£¬Ò»¸öÊÇ script¡£Ç°Õß±¾À´Êǹ¹½¨ Redis ÊÂÎñµÄ·½·¨£¬µ«È·Êµ¿ÉÒԺϲ¢¶à¸öÖ¸ÁîΪһ¸ö request£¬Ëüµ½Í¨Ñ¶¹ý³ÌÈçÏ¡£ÖÁÓÚ script£¬×îºÃÀûÓûº´æ½Å±¾µÄ sha1 hash key À´µ÷Æð½Å±¾£¬ÕâÑùͨѶÁ¿¸üС¡£
ÕâÑùȷʵ¸üÄܼõÉÙÍøÂç´«Êäʱ¼ä£¬²»ÊÇô£¿µ«Èç´ËÒÔÀ´£¬¾Í±ØÐëÒªÇóÕâ¸ö transaction / script ÖÐÉæ¼°µÄ key ÔÚͬһ¸ö node ÉÏ£¬ËùÒÔÒª×ÃÇ鿼ÂÇ¡£
Èç¹ûÉÏÃæµÄ·½·¨ÎÒÃǶ¼¿¼ÂǹýÁË£¬»¹ÊÇûÓа취ºÏ²¢¶à¸öÇëÇó£¬ÎÒÃÇ»¹¿ÉÒÔ¿¼ÂǺϲ¢¶à¸ö responses¡£±ÈÈç°Ñ 2 ¸ö»Ø¸´ÐÅÏ¢ºÏ²¢£º
ÕâÑù£¬ÀíÂÛÉÏ¿ÉÒÔÊ¡È¥ 1 ´Î»Ø¸´ËùÓõÄÍøÂç´«Êäʱ¼ä¡£Õâ¾ÍÊÇ pipeline ×öµÄÊÂÇé¡£¾Ù¸ö ruby ¿Í»§¶ËʹÓà pipeline µÄÀý×Ó£º
require?'redis'?@redis?=?Redis.new?@redis.pipelined?do?@redis.get?'key1'?@redis.set?'key2'?'some?value'?end?#?=>?[1,?2]?
¾Ý˵£¬ÓÐЩÓïÑԵĿͻ§¶Ë£¬ÉõÖÁĬÈϾÍʹÓà pipeline À´ÓÅ»¯ÑÓʱÎÊÌ⣬±ÈÈç node_redis¡£
ÁíÍ⣬²»ÊÇÈÎÒâ¶à¸ö»Ø¸´ÐÅÏ¢¶¼¿ÉÒԷŽøÒ»¸ö TCP °üÖУ¬Èç¹ûÇëÇóÊýÌ«¶à£¬»Ø¸´µÄÊý¾ÝºÜ³¤£¨±ÈÈç get Ò»¸ö³¤×Ö·û´®£©£¬TCP »¹ÊÇ»á·Ö°ü´«Ê䣬µ«Ê¹Óà pipeline£¬ÒÀÈ»¿ÉÒÔ¼õÉÙ´«Êä´ÎÊý¡£
pipeline ºÍÉÏÃæµÄÆäËû·½·¨¶¼²»Ò»ÑùµÄÊÇ£¬Ëü²»¾ßÓÐÔ×ÓÐÔ¡£ËùÒÔÔÚ cluster ״̬ϵļ¯ÈºÉÏ£¬ÊµÏÖ pipeline ±ÈÄÇЩÔ×ÓÐԵķ½·¨¸üÓпÉÄÜ¡£
С½áһϣº
ÔÚ´óÊý¾ÝÁ¿µÄÇé¿öÏ£¬ÓÐЩ²Ù×÷µÄÖ´ÐÐʱ¼ä»áÏà¶Ô³¤£¬±ÈÈç?KEYS *
£¬LRANGE mylist 0 -1
£¬ÒÔ¼°ÆäËûËã·¨¸´ÔÓ¶ÈΪ O(n) µÄÖ¸Áî¡£ÒòΪ Redis Ö»ÓÃÒ»¸öÏß³ÌÀ´×öÊý¾Ý²éѯ£¬Èç¹ûÕâЩָÁîºÄʱºÜ³¤£¬¾Í»á×èÈû Redis£¬Ôì³É´óÁ¿ÑÓʱ¡£
¾¡¹Ü¹Ù·½ÎĵµÖÐ˵?KEYS *
µÄ²éѯͦ¿ìµÄ£¬£¨ÔÚÆÕͨ±Ê¼Ç±¾ÉÏ£©É¨Ãè 1 °ÙÍò¸ö key£¬Ö»Ðè 40 ºÁÃë(²Î¼û£ºhttps://redis.io/commands/keys)£¬µ«¼¸Ê® ms ¶ÔÓÚÒ»¸öÐÔÄÜÒªÇóºÜ¸ßµÄϵͳÀ´Ëµ£¬ÒѾ²»¶ÌÁË£¬¸üºÎ¿öÈç¹ûÓм¸ÒÚ¸ö key£¨Ò»Ì¨»úÆ÷ÍêÈ«¿ÉÄܴ漸ÒÚ¸ö key£¬±ÈÈçÒ»¸ö key 100×Ö½Ú£¬1 ÒÚ¸ö key Ö»ÓÐ 10GB£©£¬Ê±¼ä¸ü³¤¡£
ËùÒÔ£¬¾¡Á¿²»ÒªÔÚÉú²ú»·¾³µÄ´úÂëʹÓÃÕâЩִÐкÜÂýµÄÖ¸ÁÕâÒ»µã Redis µÄ×÷ÕßÔÚ²©¿Í[8]ÖÐÒ²Ìáµ½ÁË¡£ÁíÍ⣬ÔËάͬѧ²éѯ Redis µÄʱºòÒ²¾¡Á¿²»ÒªÓá£ÉõÖÁ£¬Redis Essential Õâ±¾Ê齨ÒéÀûÓÃrename-command KEYS ''
À´½ûֹʹÓÃÕâ¸öºÄʱµÄÖ¸Áî¡£
³ýÁËÕâЩºÄʱµÄÖ¸ÁRedis ÖÐ transaction£¬script£¬ÒòΪ¿ÉÒԺϲ¢¶à¸ö commands Ϊһ¸ö¾ßÓÐÔ×ÓÐÔµÄÖ´Ðйý³Ì£¬ËùÒÔÒ²¿ÉÄÜÕ¼Óà Redis ºÜ³¤Ê±¼ä£¬ÐèҪעÒâ¡£
Èç¹ûÄãÏëÕÒ³öÉú²ú»·¾³Ê¹Óõġ¸ÂýÖ¸Á£¬ÄÇô¿ÉÒÔÀûÓÃ?SLOWLOG GET count
À´²é¿´×î½üµÄ count ¸öÖ´ÐÐʱ¼äºÜ³¤µÄÖ¸Áî¡£ÖÁÓڶ೤Ë㳤£¬¿ÉÒÔͨ¹ýÔÚ redis.conf ÖÐÉèÖà slowlog-log-slower-than À´¶¨Òå¡£
³ý´ËÖ®Í⣬ÔںܶàµØ·½¶¼Ã»ÓÐÌáµ½µÄÒ»¸ö¿ÉÄܵÄÂýÖ¸ÁîÊÇ?DEL
£¬µ« redis.conf ÎļþµÄ×¢ÊÍ[9]Öе¹ÊÇ˵ÁË¡£³¤»°¶Ì˵¾ÍÊÇ DEL Ò»¸ö´óµÄ object ʱºò£¬»ØÊÕÏàÓ¦µÄÄÚ´æ¿ÉÄÜ»áÐèÒªºÜ³¤Ê±¼ä£¨ÉõÖÁ¼¸Ã룩£¬ËùÒÔ£¬½¨ÒéÓà DEL µÄÒì²½°æ±¾£ºUNLINK
¡£ºóÕß»áÆô¶¯Ò»¸öÐ嵀 thread À´É¾³ýÄ¿±ê key£¬¶ø²»×èÈûÔÀ´µÄÏ̡߳£
¸ü½øÒ»²½£¬µ±Ò»¸ö key ¹ýÆÚÖ®ºó£¬Redis Ò»°ãÒ²ÐèҪͬ²½µÄ°ÑËüɾ³ý¡£ÆäÖÐÒ»ÖÖɾ³ý keys µÄ·½Ê½ÊÇ£¬Ã¿Ãë 10 ´ÎµÄ¼ì²éÒ»´ÎÓÐÉèÖùýÆÚʱ¼äµÄ keys£¬ÕâЩ keys ´æ´¢ÔÚÒ»¸öÈ«¾ÖµÄ struct ÖУ¬¿ÉÒÔÓÃ?server.db->expires
·ÃÎÊ¡£¼ì²éµÄ·½Ê½ÊÇ£º
ÕâÀï¶ÔÓÚÐÔÄܵÄÓ°ÏìÊÇ£¬Èç¹ûÕæµÄÓкܶàµÄ keys ÔÚͬһʱ¼ä¹ýÆÚ£¬ÄÇô Redis ÕæµÄ»áһֱѻ·Ö´ÐÐɾ³ý£¬Õ¼ÓÃÖ÷Ï̡߳£
¶Ô´Ë£¬Redis ×÷ÕߵĽ¨Òé[10]ÊǾ¯ÌèEXPIREAT
Õâ¸öÖ¸ÁÒòΪËü¸üÈÝÒײúÉú keys ͬʱ¹ýÆÚµÄÏÖÏó¡£ÎÒ»¹¼ûµ½¹ýһЩ½¨ÒéÊǸø keys µÄ¹ýÆÚʱ¼äÉèÖÃÒ»¸öËæ»ú²¨¶¯Á¿¡£×îºó£¬redis.conf ÖÐÒ²¸ø³öÁËÒ»¸ö·½·¨£¬°Ñ keys µÄ¹ýÆÚɾ³ý²Ù×÷±äΪÒì²½µÄ£¬¼´£¬ÔÚ redis.conf ÖÐÉèÖÃlazyfree-lazy-expire yes
¡£
Ò»ÖÖÊý¾ÝÀàÐÍ£¨±ÈÈç string£¬list£©½øÐÐÔöɾ¸Ä²éµÄЧÂÊÊÇÓÉÆäµ×²ãµÄ´æ´¢½á¹¹¾ö¶¨µÄ¡£
ÎÒÃÇÔÚʹÓÃÒ»ÖÖÊý¾ÝÀàÐÍʱ£¬¿ÉÒÔÊʵ±¹Ø×¢Ò»ÏÂËüµ×²ãµÄ´æ´¢½á¹¹¼°ÆäËã·¨£¬±ÜÃâʹÓø´ÔÓ¶ÈÌ«¸ßµÄ·½·¨¡£¾ÙÁ½¸öÀý×Ó£º
ZADD
µÄʱ¼ä¸´ÔÓ¶ÈÊÇ O(log(N))£¬Õâ±ÈÆäËûÊý¾ÝÀàÐÍÔö¼ÓÒ»¸öÐÂÔªËصIJÙ×÷¸ü¸´ÔÓ£¬ËùÒÔҪСÐÄʹÓᣳýÁËʱ¼äÐÔÄÜÉϵĿ¼ÂÇ£¬ÓÐʱºòÎÒÃÇ»¹ÐèÒª½ÚÊ¡´æ´¢¿Õ¼ä¡£±ÈÈçÉÏÃæÌáµ½µÄ ziplist ½á¹¹£¬¾Í±È hashtable ½á¹¹½ÚÊ¡´æ´¢¿Õ¼ä£¨Redis Essentials µÄ×÷Õß·Ö±ðÔÚ hashtable ºÍ ziplist ½á¹¹µÄ Hash ÖвåÈë 500 ¸ö fields£¬Ã¿¸ö field ºÍ value ¶¼ÊÇÒ»¸ö 15 λ×óÓÒµÄ×Ö·û´®£¬½á¹ûÊÇ hashtable ½á¹¹Ê¹ÓõĿռäÊÇ ziplist µÄ 4 ±¶¡££©¡£µ«½ÚÊ¡¿Õ¼äµÄÊý¾Ý½á¹¹£¬ÆäËã·¨µÄ¸´ÔӶȿÉÄܸܺߡ£ËùÒÔ£¬ÕâÀï¾ÍÐèÒªÔÚ¾ßÌåÎÊÌâÃæÇ°×ö³öȨºâ¡£»¶Ó¹Ø×¢¹«ÖںţºÖìСØ˵IJ©¿Í£¬»Ø¸´£º1024£¬¿ÉÒÔÁìÈ¡redisרÊô×ÊÁÏ¡£
ÈçºÎ×ö³ö¸üºÃµÄȨºâ£¿ÎÒ¾õµÃµÃÉîÍÚ Redis µÄ´æ´¢½á¹¹²ÅÄÜÈÃ×Ô¼º°²ÐÄ¡£Õâ·½ÃæµÄÄÚÈÝÎÒÃÇÏ´ÎÔÙ˵¡£
ÒÔÉÏÕâÈýµã¶¼ÊDZà³Ì²ãÃæµÄ¿¼ÂÇ£¬Ð´³ÌÐòʱӦ¸Ã×¢Òâ°¡¡£ÏÂÃæÕ⼸µã£¬Ò²»áÓ°Ïì Redis µÄÐÔÄÜ£¬µ«½â¾öÆðÀ´£¬¾Í²»Ö»ÊÇ¿¿´úÂë²ãÃæµÄµ÷ÕûÁË£¬»¹ÐèÒª¼Ü¹¹ºÍÔËάÉϵĿ¼ÂÇ¡£
Redis ÔËÐеÄÍⲿ»·¾³£¬Ò²¾ÍÊDzÙ×÷ϵͳºÍÓ²¼þÏÔȻҲ»áÓ°Ïì Redis µÄÐÔÄÜ¡£ÔÚ¹Ù·½ÎĵµÖУ¬¾Í¸ø³öÁËһЩÀý×Ó£º
Redis µÄÒ»ÏîÖØÒª¹¦ÄܾÍÊdz־û¯£¬Ò²¾ÍÊÇ°ÑÊý¾Ý¸´ÖƵ½Ó²ÅÌÉÏ¡£»ùÓڳ־û¯£¬²ÅÓÐÁË Redis µÄÊý¾Ý»Ö¸´µÈ¹¦ÄÜ¡£
µ«Î¬»¤Õâ¸ö³Ö¾Ã»¯µÄ¹¦ÄÜ£¬Ò²ÊÇÓÐÐÔÄÜ¿ªÏúµÄ¡£
Ê×ÏÈ˵£¬RDB È«Á¿³Ö¾Ã»¯¡£
ÕâÖֳ־û¯·½Ê½°Ñ Redis ÖеÄÈ«Á¿Êý¾Ý´ò°ü³É rdb Îļþ·ÅÔÚÓ²ÅÌÉÏ¡£µ«ÊÇÖ´ÐÐ RDB ³Ö¾Ã»¯¹ý³ÌµÄÊÇÔ½ø³Ì fork ³öÀ´Ò»¸ö×Ó½ø³Ì£¬¶ø fork Õâ¸öϵͳµ÷ÓÃÊÇÐèҪʱ¼äµÄ£¬¸ù¾ÝRedis Lab 6 ÄêÇ°×öµÄʵÑé[12]£¬ÔÚһ̨ÐÂÐ굀 AWS EC2 m1.small^13 ÉÏ£¬fork Ò»¸öÄÚ´æÕ¼Óà 1GB µÄ Redis ½ø³Ì£¬ÐèÒª 700+ ºÁÃ룬¶øÕâ¶Îʱ¼ä£¬redis ÊÇÎÞ·¨´¦ÀíÇëÇóµÄ¡£
ËäÈ»ÏÖÔڵĻúÆ÷Ó¦¸Ã¶¼»á±ÈÄǸöʱºòºÃ£¬µ«ÊÇ fork µÄ¿ªÏúÒ²Ó¦¸Ã¿¼ÂÇ°É¡£Îª´Ë£¬ÒªÊ¹ÓúÏÀíµÄ RDB ³Ö¾Ã»¯µÄʱ¼ä¼ä¸ô£¬²»ÒªÌ«Æµ·±¡£
½ÓÏÂÀ´£¬ÎÒÃÇ¿´ÁíÍâÒ»Öֳ־û¯·½Ê½£ºAOF ÔöÁ¿³Ö¾Ã»¯¡£
ÕâÖֳ־û¯·½Ê½»á°ÑÄã·¢µ½ redis server µÄÖ¸ÁîÒÔÎı¾µÄÐÎʽ±£´æÏÂÀ´£¨¸ñʽ×ñÑ redis protocol£©£¬Õâ¸ö¹ý³ÌÖУ¬»áµ÷ÓÃÁ½¸öϵͳµ÷Óã¬Ò»¸öÊÇ?write(2)
£¬Í¬²½Íê³É£¬Ò»¸öÊÇfsync(2)
£¬Òì²½Íê³É¡£
ÕâÁ½²¿¶¼¿ÉÄÜÊÇÑÓʱÎÊÌâµÄÔÒò£º
ÆäÖУ¬write µÄ×èÈûòËÆÖ»ÄܽÓÊÜ£¬ÒòΪûÓиüºÃµÄ·½·¨°ÑÊý¾Ýдµ½Ò»¸öÎļþÖÐÁË¡£µ«¶ÔÓÚ fsync£¬Redis ÔÊÐíÈýÖÖÅäÖã¬Ñ¡ÓÃÄÄÖÖÈ¡¾öÓÚÄã¶Ô±¸·Ý¼°Ê±ÐÔºÍÐÔÄܵÄƽºâ£º
ÒÔÉÏ£¬ÎÒÃǶ¼ÊÇ»ùÓÚµ¥Ì¨£¬»òÕßµ¥¸ö Redis ·þÎñ½øÐÐÓÅ»¯¡£ÏÂÃ棬ÎÒÃÇ¿¼Âǵ±ÍøÕ¾µÄ¹æÄ£±ä´óʱ£¬ÀûÓ÷ֲ¼Ê½¼Ü¹¹À´±£ÕÏ Redis ÐÔÄܵÄÎÊÌâ¡£
Ê×ÏÈ˵£¬ÄÄЩÇé¿öϲ»µÃ²»£¨»òÕß×îºÃ£©Ê¹Ó÷ֲ¼Ê½¼Ü¹¹£º
½â¾öÕâЩÎÊÌâ¿ÉÒÔ²ÉÓÃÊý¾Ý·ÖƬ»òÕßÖ÷´Ó·ÖÀ룬»òÕßÁ½Õ߶¼Ó㨼´£¬ÔÚ·ÖƬÓÃµÄ cluster ½ÚµãÉÏ£¬Ò²ÉèÖÃÖ÷´Ó½á¹¹£©¡£
ÕâÑùµÄ¼Ü¹¹£¬¿ÉÒÔΪÐÔÄÜÌáÉý¼ÓÈëеÄÇÐÈëµã£º
ÆäÖÐÇ°Á½Ìõ¶¼ÊǸù¾Ý Redis µ¥Ï̵߳ÄÌØÐÔ£¬ÓÃÆäËû½ø³Ì£¨ÉõÖÁ»úÆ÷£©×öÐÔÄܲ¹³äµÄ·½·¨¡£
µ±È»£¬Ê¹Ó÷ֲ¼Ê½¼Ü¹¹£¬Ò²¿ÉÄܶÔÐÔÄÜÓÐÓ°Ï죬±ÈÈçÇëÇóÐèÒª±»×ª·¢£¬Êý¾ÝÐèÒª±»²»¶Ï¸´ÖÆ·Ö·¢¡££¨´ý²é£©
ÁìȡרÊô 10ÔªÎÞÃż÷ȯ
˽Ïí×îР¼¼Êõ¸É»õ