Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
¸ß²¢·¢¼Ü¹¹Óë·Ö²¼Ê½¼¼ÊõNoSQL -- RedisÔ­ÀíÆÊÎö
 
  2135  次浏览      27
 2018-10-25
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÎÄÖ÷Òª½éÉÜRedisÔ­Àí¡¢Ò»ÖÂÐÔ¹þÏ£Ëã·¨ÊÇÈçºÎÉè¼ÆÒÔ¼°¹þÏ£Ëã·¨µÄÆÀ¼ÛµÈÏà¹ØÄÚÈÝ¡£

redisÔ­ÀíÆÊÎö

RedisÊÇÒ»¸ö¿ªÔ´µÄʹÓÃANSI CÓïÑÔ±àд¡¢Ö§³ÖÍøÂç¡¢¿É»ùÓÚÄÚ´æÒà¿É³Ö¾Ã»¯µÄÈÕÖ¾ÐÍ¡¢Key-ValueÊý¾Ý¿â¡£Ëü¿ÉÒÔÓÃ×÷Êý¾Ý¿â¡¢»º´æºÍÏûÏ¢Öмä¼þ¡£

/*
* Redis ¶ÔÏó
*/
typedef struct redisObject {

// ÀàÐÍ
unsigned type:4;

// ²»Ê¹ÓÃ(¶ÔÆëλ)
unsigned notused:2;

// ±àÂ뷽ʽ
unsigned encoding:4;

// LRU ʱ¼ä£¨Ïà¶ÔÓÚ server.lruclock£©
unsigned lru:22;

// ÒýÓüÆÊý
int refcount;

// Ö¸Ïò¶ÔÏóµÄÖµ
void *ptr;

} robj;

ËüÖ§³Ö¶àÖÖÀàÐ͵ÄÊý¾Ý½á¹¹£¬Èç ×Ö·û´®£¨strings£©£¬ É¢ÁУ¨hashes£©£¬ ÁÐ±í£¨lists£©£¬ ¼¯ºÏ£¨sets£©£¬ ÓÐÐò¼¯ºÏ£¨sorted sets£© Ó뷶Χ²éѯ£¬ bitmaps£¬ hyperloglogs ºÍ µØÀí¿Õ¼ä£¨geospatial£© Ë÷Òý°ë¾¶²éѯ¡£

hashes´æµÄÊÇ×Ö·û´®ºÍ×Ö·û´®ÖµÖ®¼äµÄÓ³É䣬±ÈÈçÒ»¸öÓû§Òª´æ´¢ÆäÈ«Ãû¡¢ÐÕÊÏ¡¢ÄêÁäµÈµÈ£¬¾ÍºÜÊʺÏʹÓùþÏ£¡£

ÆÀ¼Û¹þÏ£Ëã·¨ºÃ»µµÄËĸö¶¨Ò壺

redis¼¯Èº·½°¸£ºÒ»ÖÂÐÔhashËã·¨ Éè¼ÆÄ¿±êÊÇΪÁ˽â¾öÒòÌØÍøÖеÄÈȵã(Hot spot)ÎÊÌâ

Ò»ÖÂÐÔ¹þÏ£Ëã·¨ÊÇÈçºÎÉè¼Æ£º

»·ÐÎHash¿Õ¼ä

°´ÕÕ³£ÓõÄhashËã·¨À´½«¶ÔÓ¦µÄkey¹þÏ£µ½Ò»¸ö¾ßÓÐ2^32´Î·½¸öͰµÄ¿Õ¼äÖУ¬¼´0~(2^32)-1µÄÊý×Ö¿Õ¼äÖС£ÏÖÔÚÎÒÃÇ¿ÉÒÔ½«ÕâЩÊý×ÖͷβÏàÁ¬£¬ÏëÏó³ÉÒ»¸ö±ÕºÏµÄ»·ÐΡ£ÈçÏÂͼ

°ÑÊý¾Ýͨ¹ýÒ»¶¨µÄhashËã·¨´¦ÀíºóÓ³Éäµ½»·ÉÏ

ÏÖÔÚÎÒÃǽ«object1¡¢object2¡¢object3¡¢object4Ëĸö¶ÔÏóͨ¹ýÌØ¶¨µÄHashº¯Êý¼ÆËã³ö¶ÔÓ¦µÄkeyÖµ£¬È»ºóÉ¢Áе½Hash»·ÉÏ¡£ÈçÏÂͼ£º

Hash(object1) = key1£»

Hash(object2) = key2£»

Hash(object3) = key3£»

Hash(object4) = key4£»

½«»úÆ÷ͨ¹ýhashËã·¨Ó³Éäµ½»·ÉÏ

ÔÚ²ÉÓÃÒ»ÖÂÐÔ¹þÏ£Ëã·¨µÄ·Ö²¼Ê½¼¯ÈºÖн«ÐµĻúÆ÷¼ÓÈ룬ÆäÔ­ÀíÊÇͨ¹ýʹÓÃÓë¶ÔÏó´æ´¢Ò»ÑùµÄHashËã·¨½«»úÆ÷Ò²Ó³Éäµ½»·ÖУ¨Ò»°ãÇé¿ö϶ԻúÆ÷µÄhash¼ÆËãÊDzÉÓûúÆ÷µÄIP»òÕß»úÆ÷ΨһµÄ±ðÃû×÷ΪÊäÈëÖµ£©£¬È»ºóÒÔ˳ʱÕëµÄ·½Ïò¼ÆË㣬½«ËùÓжÔÏó´æ´¢µ½Àë×Ô¼º×î½üµÄ»úÆ÷ÖС£

¼ÙÉèÏÖÔÚÓÐNODE1£¬NODE2£¬NODE3Èý̨»úÆ÷£¬Í¨¹ýHashËã·¨µÃµ½¶ÔÓ¦µÄKEYÖµ£¬Ó³Éäµ½»·ÖУ¬ÆäʾÒâͼÈçÏ£º

Hash(NODE1) = KEY1;

Hash(NODE2) = KEY2;

Hash(NODE3) = KEY3;

ͨ¹ýÉÏͼ¿ÉÒÔ¿´³ö¶ÔÏóÓë»úÆ÷´¦ÓÚͬһ¹þÏ£¿Õ¼äÖУ¬ÕâÑù°´Ë³Ê±Õëת¶¯object1´æ´¢µ½ÁËNODE1ÖУ¬object3´æ´¢µ½ÁËNODE2ÖУ¬object2¡¢object4´æ´¢µ½ÁËNODE3ÖС£ÔÚÕâÑùµÄ²¿Êð»·¾³ÖУ¬hash»·ÊDz»»á±ä¸üµÄ£¬Òò´Ë£¬Í¨¹ýËã³ö¶ÔÏóµÄhashÖµ¾ÍÄÜ¿ìËٵĶ¨Î»µ½¶ÔÓ¦µÄ»úÆ÷ÖУ¬ÕâÑù¾ÍÄÜÕÒµ½¶ÔÏóÕæÕýµÄ´æ´¢Î»ÖÃÁË¡£

»úÆ÷µÄɾ³ýÓëÌí¼Ó

ÆÕͨhashÇóÓàËã·¨×îΪ²»Í׵ĵط½¾ÍÊÇÔÚÓлúÆ÷µÄÌí¼Ó»òÕßɾ³ýÖ®ºó»áÕճɴóÁ¿µÄ¶ÔÏó´æ´¢Î»ÖÃʧЧ£¬ÕâÑù¾Í´ó´óµÄ²»Âú×ãµ¥µ÷ÐÔÁË¡£ÏÂÃæÀ´·ÖÎöÒ»ÏÂÒ»ÖÂÐÔ¹þÏ£Ëã·¨ÊÇÈçºÎ´¦ÀíµÄ¡£

1. ½Úµã£¨»úÆ÷£©µÄɾ³ý

ÒÔÉÏÃæµÄ·Ö²¼ÎªÀý£¬Èç¹ûNODE2³öÏÖ¹ÊÕϱ»É¾³ýÁË£¬ÄÇô°´ÕÕ˳ʱÕëÇ¨ÒÆµÄ·½·¨£¬object3½«»á±»Ç¨ÒƵ½NODE3ÖУ¬ÕâÑù½ö½öÊÇobject3µÄÓ³ÉäλÖ÷¢ÉúÁ˱仯£¬ÆäËüµÄ¶ÔÏóûÓÐÈκεĸ͝¡£ÈçÏÂͼ£º

2. ½Úµã£¨»úÆ÷£©µÄÌí¼Ó

Èç¹ûÍù¼¯ÈºÖÐÌí¼ÓÒ»¸öеĽڵãNODE4£¬Í¨¹ý¶ÔÓ¦µÄ¹þÏ£Ëã·¨µÃµ½KEY4£¬²¢Ó³Éäµ½»·ÖУ¬ÈçÏÂͼ£º

ͨ¹ý°´Ë³Ê±ÕëÇ¨ÒÆµÄ¹æÔò£¬ÄÇôobject2±»Ç¨ÒƵ½ÁËNODE4ÖУ¬ÆäËü¶ÔÏó»¹±£³ÖÕâÔ­ÓеĴ洢λÖá£Í¨¹ý¶Ô½ÚµãµÄÌí¼ÓºÍɾ³ýµÄ·ÖÎö£¬Ò»ÖÂÐÔ¹þÏ£Ëã·¨ÔÚ±£³ÖÁ˵¥µ÷ÐÔµÄͬʱ£¬»¹ÊÇÊý¾ÝµÄÇ¨ÒÆ´ïµ½ÁË×îС£¬ÕâÑùµÄËã·¨¶Ô·Ö²¼Ê½¼¯ÈºÀ´ËµÊǷdz£ºÏÊʵ쬱ÜÃâÁË´óÁ¿Êý¾ÝÇ¨ÒÆ£¬¼õСÁË·þÎñÆ÷µÄµÄѹÁ¦¡£

ƽºâÐÔ

¸ù¾ÝÉÏÃæµÄͼ½â·ÖÎö£¬Ò»ÖÂÐÔ¹þÏ£Ëã·¨Âú×ãÁ˵¥µ÷ÐԺ͸ºÔؾùºâµÄÌØÐÔÒÔ¼°Ò»°ãhashËã·¨µÄ·ÖÉ¢ÐÔ£¬µ«Õ⻹²¢²»Äܵ±×öÆä±»¹ã·ºÓ¦ÓõÄÔ­ÓÉ£¬ÒòΪ»¹È±ÉÙÁËÆ½ºâÐÔ¡£ÏÂÃæ½«·ÖÎöÒ»ÖÂÐÔ¹þÏ£Ëã·¨ÊÇÈçºÎÂú×ãÆ½ºâÐԵġ£hashËã·¨ÊDz»±£Ö¤Æ½ºâµÄ£¬ÈçÉÏÃæÖ»²¿ÊðÁËNODE1ºÍNODE3µÄÇé¿ö£¨NODE2±»É¾³ýµÄͼ£©£¬object1´æ´¢µ½ÁËNODE1ÖУ¬¶øobject2¡¢object3¡¢object4¶¼´æ´¢µ½ÁËNODE3ÖУ¬ÕâÑù¾ÍÕÕ³ÉÁ˷dz£²»Æ½ºâµÄ״̬¡£ÔÚÒ»ÖÂÐÔ¹þÏ£Ëã·¨ÖУ¬ÎªÁ˾¡¿ÉÄܵÄÂú×ãÆ½ºâÐÔ£¬ÆäÒýÈëÁËÐéÄâ½Úµã¡£

¡ª¡ª¡°ÐéÄâ½Úµã¡±£¨ virtual node £©ÊÇʵ¼Ê½Úµã£¨»úÆ÷£©ÔÚ hash ¿Õ¼äµÄ¸´ÖÆÆ·£¨ replica £©£¬Ò»Êµ¼Ê¸ö½Úµã£¨»úÆ÷£©¶ÔÓ¦ÁËÈô¸É¸ö¡°ÐéÄâ½Úµã¡±£¬Õâ¸ö¶ÔÓ¦¸öÊýÒ²³ÉΪ¡°¸´ÖƸöÊý¡±£¬¡°ÐéÄâ½Úµã¡±ÔÚ hash ¿Õ¼äÖÐÒÔhashÖµÅÅÁС£

ÒÔÉÏÃæÖ»²¿ÊðÁËNODE1ºÍNODE3µÄÇé¿ö£¨NODE2±»É¾³ýµÄͼ£©ÎªÀý£¬Ö®Ç°µÄ¶ÔÏóÔÚ»úÆ÷Éϵķֲ¼ºÜ²»¾ùºâ£¬ÏÖÔÚÎÒÃÇÒÔ2¸ö¸±±¾£¨¸´ÖƸöÊý£©ÎªÀý£¬ÕâÑùÕû¸öhash»·ÖоʹæÔÚÁË4¸öÐéÄâ½Úµã£¬×îºó¶ÔÏóÓ³ÉäµÄ¹ØÏµÍ¼ÈçÏ£º

¸ù¾ÝÉÏͼ¿ÉÖª¶ÔÏóµÄÓ³Éä¹ØÏµ£ºobject1->NODE1-1£¬object2->NODE1-2£¬object3->NODE3-2£¬object4->NODE3-1¡£Í¨¹ýÐéÄâ½ÚµãµÄÒýÈ룬¶ÔÏóµÄ·Ö²¼¾Í±È½Ï¾ùºâÁË¡£ÄÇôÔÚʵ¼Ê²Ù×÷ÖУ¬ÕýÕæµÄ¶ÔÏó²éѯÊÇÈçºÎ¹¤×÷µÄÄØ£¿¶ÔÏó´Óhashµ½ÐéÄâ½Úµãµ½Êµ¼Ê½ÚµãµÄת»»ÈçÏÂͼ£º

¡°ÐéÄâ½Úµã¡±µÄhash¼ÆËã¿ÉÒÔ²ÉÓöÔÓ¦½ÚµãµÄIPµØÖ·¼ÓÊý×Öºó׺µÄ·½Ê½¡£ÀýÈç¼ÙÉèNODE1µÄIPµØÖ·Îª192.168.1.100¡£ÒýÈë¡°ÐéÄâ½Úµã¡±Ç°£¬¼ÆËã cache A µÄ hash Öµ£º

Hash(¡°192.168.1.100¡±);

ÒýÈë¡°ÐéÄâ½Úµã¡±ºó£¬¼ÆËã¡°ÐéÄâ½Ú¡±µãNODE1-1ºÍNODE1-2µÄhashÖµ£º

Hash(¡°192.168.1.100#1¡±); // NODE1-1

Hash(¡°192.168.1.100#2¡±); // NODE1-2

   
2135 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ