Redis dict and_rehash

5,392 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,392
On SlideShare
0
From Embeds
0
Number of Embeds
2,651
Actions
Shares
0
Downloads
12
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Redis dict and_rehash

  1. 1. Redis Dict Data Structure charsyam@naver.com
  2. 2. Redis Insert Flow
  3. 3. dictAdd dictAddRaw 1. Redis uses two tables: table[0], table[1] 2. Tables have buckets for dictEntry dictSetVal dictAddRaw_dictRehashStep 1. dictAddRaw actually makes new dirEntry. 2. If rehash is possbile, conduct rehashing. 3. _dictKeyIndex check the item is existed. If it is existed, dictAddRaw will fail. _dictKeyIndex 4. Used++ _dictSetKey
  4. 4. 1. dictRehash’s parameter n is the variable that howdictRehashStep many buckets will be rehashed. For performance, it is always 1. 2. If Ht[0]used is 0, rehashng is finished. Ht[0] = ht[1] and return; dictRehash 3. while(d->ht[0].table[d->rehashidx] == NULL) d- >rehashidx++; if current bucket is NULL, go next bucket. 4. Bucket size is always increased as twice. 5. And divide dictEntry with hashmask. For example, at the first time. mask is 3 and hash value 2, 5 were in same bucket . After doubling bucket size, mask will be 7, so hash value 2 will be in bucket #2, and 5 will be in bucket #5
  5. 5. Redis Dict is Hash
  6. 6. Dynamic HashExpand twiceLinear probing
  7. 7. Add 0,1,2,3 Bucket #0 0 Bucket #1 1 Bucket #2 2 Bucket #3 3
  8. 8. Add 4 with line Probing Bucket #0 4 0 Bucket #1 1 Bucket #2 2 Bucket #3 3
  9. 9. Rehashing with HT[1]Bucket #0 4 0Bucket #1 1 Bucket #0 Bucket #1Bucket #2 2 Bucket #2Bucket #3 3 Bucket #3 Bucket #4 Bucket #5 Bucket #6 Bucket #7
  10. 10. Rehashing one step #1 Bucket #0 Used--; Used--; Bucket #1 1 Bucket #0 0 Bucket #1 Bucket #2 2 Bucket #2 Bucket #3 3 Bucket #3 Bucket #4 4 Bucket #5 Bucket #6 Bucket #7
  11. 11. After all rehashinght[0] = ht[1]reset ht[1]For next rehashing

×