Go Map VS Redis Set

Quite similar

TL;DR

struct

map

[]buckets

bucket

#kv

load_factor

扩容

缩容

GO Map

hmap

buckets, oldbuckets

bmap

8

6.5

2/1.25

-

Redis Set

dict

dictht[0], dictht[1]

dictEntry

1

1/5/0.1

2

0.5

  • 负载因子: load_factor = 6.5

  • 碰撞:key冲突 -> overflow

  • 增量扩容 :load_factor>6.5,<1024翻倍或者1/4

  • 等量扩容:overflow>max(2^15, key),空洞太多

  • 动态扩容:2个bucket,迁移old-new时rehash,标记key是否已经迁移

  • map不执行缩容

Redis Set

  • load_factor =dictht[0].use/dictht[1].size 1(没有AOF/BGSAVE)/ 5

  • 动态扩容:翻倍;迁移0-1时rehash,标记key是否已经迁移;完成后0,1标记交换

  • 动态缩容:load_factor<0.1是减半

最后更新于