字典作为一种保存键值对的数据结构,在redis中使用十分广泛,redis作为数据库本身底层就是通过字典实现的,对redis的增删改查实际上也是构建在字典之上。

一.字典的结构

二.hash冲突

采用头插链地址法,因为没有指向链尾的指针,插在最前面,复杂度O(1)

三.rehash

即将entry数组从ht[0]重新散列到ht[1]的过程

1.为ht[1]分配空间:

(1)扩容:ht[1]的大小为第一个大于等于ht[0].used * 2的2的n次幂

(2)收缩:ht[1]的大小为第一个大于等于ht[0].used的2的n次幂

2.将ht[0]上所有的键值对重新计算hash和索引值,散列到ht[1]的指定位置

3.释放ht[0],ht[0] = ht[1],新建ht[1]

四.渐进式hash

在渐进式rehash过程中,字典的删改查将先在ht[0]找,找不到会去ht[1]找,增加则只会增加到ht[1]

最新文章

  1. 如何准确高效的获取数据库新插入数据的主键id
  2. java Http原生 Get 和Post 支持代理认证
  3. Maven 使用介绍
  4. :first与:first-child的区别
  5. ubuntu 16.04 安装 QQ
  6. apache日志轮转
  7. (转)HTML 5离线存储之Web SQL
  8. 关于oracle存储过程的一些知识点
  9. 防止SQL注入和XSS攻击Filter
  10. C/C++中的变量作用域
  11. QTableView表格滚动条样式(QSS真是细致到家了)
  12. 探讨SQL Server并发处理存在就更新七种解决方案
  13. Tomcat Connector的三种运行模式
  14. Idea中右边的maven projects窗口找不到了如何调出来
  15. dev gridcontrol 无法编辑 解决方案
  16. 从javascript发展说到vue
  17. 吐槽一下--最近多次在腾讯以及万科的面试经历---Web前端与PHP后端开发
  18. 洛谷 P4302 【[SCOI2003]字符串折叠】
  19. Redis安装教程及可视化工具RedisDesktopManager下载安装
  20. 面向对象的封装(私有化)及@property(查看)/@setter(修改)!!!

热门文章

  1. linux7下修改主机名的方式
  2. JavaScript中的构造函数和原型!
  3. Python+Selenium+Unittest实现PO模式web自动化框架(6)
  4. Linux中LPC、RPC、IPC的区别
  5. MonkeyScript
  6. UVA11694 Gokigen Naname题解
  7. P5689 多叉堆
  8. 接口鉴权之sign签名校验与JWT验证
  9. maven pom文件的 name 标签 和 url标签到底是什么作用
  10. 基于Koa2框架的项目搭建及实战开发