Redis Source dict.c注释
参考文献
src/dict.c
基于Redis 6.2版本
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 ...
Redis Source - Hash
参考文献
极客时间专栏 <<Redis 源码剖析与实战>> 第三讲 如何实现一个性能优异的Hash表
Hash
源码基于Redis 6.2分支
Redis如何实现链式哈希
什么是哈希冲突?
由于键空间会大于Hash表空间,这就导致在用Hash函数把键映射到Hash表空间时,不可避免地会出现不同的键被映射到数组的同一个位置上.而如果同一个位置只能保存一个键值对,就会导致Hash表保存的数据非常有限,这就是常说的哈希冲突.
如何解决哈希冲突呢?
方案一: 链式哈希
局限: 链式哈希的链不能太长,否则会降低Hash表性能
方案二: 就是当链式哈希的链长达到一定长度时,可以使用rehash
改进方法: 渐进式rehash
结构体
12345678910111213141516171819202122232425262728293031323334353637383940414243444546// src/dict.htypedef struct dict { // 指向 dictType 类型的指针,用于保存字典的类型信息. ...