您的位置:首页 > 数据库 > Redis

【Redis】初探dict字典原理的实现(二)

2014-04-06 11:04 459 查看
时间颇为仓促,以下简单概括一下dict的基础与核心的知识点:

1. 应用范围: redis中字典的应用范围非常广泛; 数据库的键空间, hash类型等都是通过字典来实现的.

2. rehash: 内部维持了两个hashtable, ht[0]为当前所用到的存储ht;

如果正在rehasing, 那么ht[0]会有部分数据迁移到ht[1]; 如果rehash完成, ht[1]将会成为ht[0], 而新的ht[1]将重新初始化;

rehash是自动进行的, 如果填充率过高(即节点数量比可用bucket多得多时)而超过预设值时,将会进行reash;

rehash过程是分步而不是一次来完成的,可以有效减少阻塞时长.

3. resize: 体积缩小的规则与rehash是类似的,最大不同之处是resize是需要程序手动调起的, 而rehash可以自动进行.

4. 安全迭代器与非安全迭代器: 非安全迭代器只能进行Get等读的操作, 而安全迭代器则可以进行iterator支持的任何操作.

由于dict结构中保存了safe iterators的数量,如果数量不为0, 是不能进行下一步的rehash的; 因此安全迭代器的存在保证了遍历数据的准确性;

在非安全迭代器的迭代过程中, 会通过fingerprint方法来校验iterator在初始化与释放时字典的hash值是否一致; 如果不一致说明迭代过程中发生了非法操作.

5. 字典中的hash表通过链地址法来解决键的冲突问题.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: