Redis为什么那么快

  • 高速的存储介质
  • 优良的数据存储结构
  • 高效的网络io模型
  • 高效的线程模型

redis数据库设计

hashtable

hashmap redis 亿 查询 redis hash结构数据量太大_数据库

渐进式rehash机制

字典扩容需要同时满足如下两个条件:

1、哈希表中保存的key数量超过了哈希表的大小(可以看出size既是哈希表大小,同时也是扩容阈值)

2、当前没有子进程在执行aof文件重写或者生成RDB文件;或者保存的节点数与哈希表大小的比例超过了安全阈值(默认值为5)

扩容每次扩容一倍 

hashmap redis 亿 查询 redis hash结构数据量太大_缓存_02

扩容之后,老的hashtable中的值需要转移到新的hashtable,重新散列,也叫rehash,转移完之后释放之前的hashtable。

redis string 下 int 编码底层原理

hashmap redis 亿 查询 redis hash结构数据量太大_数据类型_03


存储整形值的时候,会判断是否可以转为整形值

hashmap redis 亿 查询 redis hash结构数据量太大_hashmap redis 亿 查询_04


hashmap redis 亿 查询 redis hash结构数据量太大_缓存_05


如果可以转为整形的话,就让这个地址指针强行指向这个值

hashmap redis 亿 查询 redis hash结构数据量太大_数据类型_06

redis string 下 embstr 编码底层原理

hashmap redis 亿 查询 redis hash结构数据量太大_数据库_07


hashmap redis 亿 查询 redis hash结构数据量太大_hashmap redis 亿 查询_08


上面的总共占20byte,剩余44byte为embstr的长度

hashmap redis 亿 查询 redis hash结构数据量太大_缓存_09

list 数据类型核心操作

hashmap redis 亿 查询 redis hash结构数据量太大_数据类型_10

list 数据类型底层设计

hashmap redis 亿 查询 redis hash结构数据量太大_缓存_11


hashmap redis 亿 查询 redis hash结构数据量太大_redis_12


使用了双向链表优化

hashmap redis 亿 查询 redis hash结构数据量太大_数据库_13


hashmap redis 亿 查询 redis hash结构数据量太大_redis_14

set类型底层实现

hashmap redis 亿 查询 redis hash结构数据量太大_缓存_15


hashmap redis 亿 查询 redis hash结构数据量太大_数据库_16

hashmap redis 亿 查询 redis hash结构数据量太大_redis_17

hash数据类型

hashmap redis 亿 查询 redis hash结构数据量太大_redis_18


hashmap redis 亿 查询 redis hash结构数据量太大_缓存_19


hashmap redis 亿 查询 redis hash结构数据量太大_数据类型_20


hashmap redis 亿 查询 redis hash结构数据量太大_数据类型_21

zset数据类型

hashmap redis 亿 查询 redis hash结构数据量太大_hashmap redis 亿 查询_22

redis跳表编码实现

hashmap redis 亿 查询 redis hash结构数据量太大_redis_23


hashmap redis 亿 查询 redis hash结构数据量太大_hashmap redis 亿 查询_24