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是减半
最后更新于