ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

RedisÊý¾Ý½á¹¹£¨¶þ£©×Öµä
2015-07-24 10:30:47 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:1´Î
Tags£ºRedis Êý¾Ý½á¹¹ ×Öµä

Redis×ÖµäÆäʵ¾ÍÊÇHash±í£¬ÆäʵÏÖºÍJAVAÓïÑÔÖеÄhashmap½á¹¹´óͬСÒ죬°´Key-Value·½Ê½´æ´¢¼üÖµ¶Ô£¬µ«ÊÇÓÖ´æÔÚÒ»¶¨µÄ²îÒì¡£
javaÖеÄhashmap½á¹¹¼´°üº¬hash±í£¬ÓÖʵÏÖÁËrehash×ÔÎÒÀ©³ä£»
¶øredis×ÖµäÔòͨ¹ýdictht½á¹¹ÊµÏÖhash±í£¬Í¨¹ý×ֵ䣨dict£©ÊµÏÖrehash£¨×ÖµäÖаüº¬Ò»¸ödicthtÊý×édictht ht[2]£©¡£

Redis×ÖµäµÄʵÏÖ
Redis×ÖµäËùʹÓõĹþÏ£±íÓÉdict.h/dictht½á¹¹¶¨Ò壺

typedef struct dictht{
dictEntry **table;
unsigned long size;
unsigned long sizemask;
unsigned long used;
}dictht;

tableΪһ¸ödictEntry½á¹¹µÄÊý×飬ÿ¸ödictEntry½á¹¹±£´æ×ÅÒ»¸ökey-value¶Ô¡£sizeΪtableÊý×éµÄ´óС£¨×¢Òâ²»ÊÇkey-value¶ÔµÄ¸öÊý£©£»used²ÅÊÇkey-value¶ÔµÄ¸öÊý£»sizemaskΪsize-1£¬ÓÃ;ºóÃæ»áÌáµ½£»
dictEntry½á¹¹¶¨ÒåÈçÏ£º

typedef struct dictEntry{
void *key;
union{
void *val;
uint64_t u64;
int64_t s64;
} v;
struct dictEntry *next;
}

key¼´Îª¼ü£¬v¼´ÎªÖµ£¬Óɶ¨Òå¿ÉÒÔ¿´³ö£¬v¼È¿ÉÒÔÊÇÒ»¸öÖ¸Õ룬Ҳ¿ÉÒÔÊÇÒ»¸öuint64_tÕûÊý»òÕßint64_tÕûÊý¡£
nextÊôÐÔÖ¸ÏòÏÂÒ»¸ödictEntry£¬ÐγÉÁ´±í½á¹¹¡£ÔÚ×Öµä½á¹¹ÖУ¬Ã¿Ò»¸ökey-valueÖеÄkeyµÄhashÖµÓ³Éäµ½tableµÄϱ꣬Èç¹ûÓжà¸ökeyµÄhashÖµÓ³Éäµ½tableµÄͬһ¸öϱ꣬ÔòÕâЩkey-value¶Ô½«Í¨¹ý nextÖ¸ÕëÐγÉÒ»¸öÁ´±í£¬´æµ½tableµÄµ±Ç°Ï±êÖС£

RedisÖеÄ×ÖµäÓÉdict.h/dict½á¹¹±íʾ£º

typedef struct dict{
dictType *type;
void *privdata;
dictht ht[2];
int rehashidx;
} dict;

×¢Òâµ½£¬ÆäÖУº

dictht¼´ÎªÇ°Ãæ½éÉܵĹþÏ£±í½á¹¹£» typeÖ¸ÕëΪһ¸ödictType½á¹¹£¬¸Ã½á¹¹±£´æÁËһЩÓÃÓÚ²Ù×÷ÌØ¶¨ÀàÐͼüÖµ¶ÔµÄº¯Êý£¬Redis»áΪÓÃ;²»Í¬µÄ×ÖµäÉèÖò»Í¬µÄÀàÐÍÌØ¶¨º¯Êý£» privdataÔò±£´æÁËÐèÒª´«µÝ¸øtypeÖÐÌØ¶¨º¯ÊýµÄ¿ÉÑ¡²ÎÊý£»
dictType½á¹¹ÈçÏ£º
typedef struct dictType{
//¼ÆËãhashÖµ
unsigned int (*hashFunction)(const void *key);
//¸´ÖƼü
void *(*keyDup)(void *privdata,const void *key);
//¸´ÖÆÖµ
void *(*valDup)(void *privdata,const void *obj);
//¶Ô±È¼ü
int *(*keyCOmpare)(void *privdata,const void *key1,const void *key2);
//Ïú»Ù¼ü
void (*keyDestructor)(void *privdata,void *key);
//Ïú»ÙÖµ
void (*valDestructor)(void *privdata,void *obj);
}dictType;
htÊý×éÔò°üº¬2¸ödictht½á¹¹£¬Æ½Ê±Ö»Ê¹ÓÃht[0]£¬ÔÚrehashµÄʱºòʹÓÃht[1]£» rehashidxÔòΪһ¸ö±ê־룬Èç¹ûµ±Ç°Ã»ÓÐÔÚ½øÐÐrehash£¬ÔòֵΪ-1£»redisͨ¹ý½¥½ø·½Ê½½øÐÐrehash£¬rehashÆÚ¼ä£¬Ã¿Ö´ÐÐÒ»´Î²Ù×÷£¬ÔòrehashidxÖµ¼Ó1£»

Redis¹þÏ£Ëã·¨

£¨Î´Íê´ýÐø¡£¡£¡££©

¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºAerospikeC¿Í»§¶ËÊÖ²á¨D¨D¨DÊý¾ÝÉ.. ÏÂһƪ£ºredisÄÚ´æ¹ÜÀí´úÂë×¢ÊÍ

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤TCP/UDPЭÒé_°Ù¶È°Ù¿Æ (2025-12-26 12:20:11)
¡¤Ê²Ã´ÊÇTCPºÍUDPЭÒé (2025-12-26 12:20:09)
¡¤TCPºÍUDPÏê½â (·Ç³£ (2025-12-26 12:20:06)
¡¤Python ½Ì³Ì - W3Sch (2025-12-26 12:00:51)
¡¤Python»ù´¡½Ì³Ì£¬Pyt (2025-12-26 12:00:48)