Your SlideShare is downloading. ×
0
Redis dict and_rehash
Redis dict and_rehash
Redis dict and_rehash
Redis dict and_rehash
Redis dict and_rehash
Redis dict and_rehash
Redis dict and_rehash
Redis dict and_rehash
Redis dict and_rehash
Redis dict and_rehash
Redis dict and_rehash
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Redis dict and_rehash

4,295

Published on

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

No Downloads
Views
Total Views
4,295
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
10
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Redis Dict Data Structure charsyam@naver.com
  • 2. Redis Insert Flow
  • 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. 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. Redis Dict is Hash
  • 6. Dynamic HashExpand twiceLinear probing
  • 7. Add 0,1,2,3 Bucket #0 0 Bucket #1 1 Bucket #2 2 Bucket #3 3
  • 8. Add 4 with line Probing Bucket #0 4 0 Bucket #1 1 Bucket #2 2 Bucket #3 3
  • 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. 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. After all rehashinght[0] = ht[1]reset ht[1]For next rehashing

×