来看看Redis拥有的数据结构

数据结构

数据类型-结构映射关系

Hash表

Redis采用Hash表方式存储K-V对,所以时间复杂读达到了(O1)
通过计算Key的hash值在哈希桶(数组中的一个位置)中拿到V的位置(指针)。
指针中存储的就是Redis的数据类型了。

  • Hash冲突:Redis采用链表的方式存储冲突列。next指针指向下一个元素。
  • Hash扩容:Redis默认有俩个Hash表T,T1 当达到 ? 后给T1分配2倍T的空间。为保证效率不是直接T rehash T1的,而是采用渐进式reHash方案,在接收客户端请求时将T表第N个桶中的元素拷贝到T1,每次处理请求N++,rehash结束后释放T空间;
  • rehash期间的数据查询: 先查询T没有去T1找
  • rehash期间的数据插入: 直接插入T1
  • rehash的效率与完整性: 为保证rehash执行效率redis后台还有一个定时任务去执行rehash操作。

整形数组

压缩数组

与整形数组一样是一个非常紧凑的数据结构,Redis是一个内存数据库需要尽可能的优化提升内存利用率。Redis在集合数据少于64kb时默认采用的是数据方式存储,可以利用上CPU的高速缓存保证查询效率。

压缩数组
由于维护了首位偏移量所以执行首位插入删除操作为(O1)

双向链表

跳表

前提是数据有序
采用空间换时间的方案,增加多级索引。
在这里插入图片描述

数据类型

String(简单动态字符串)

posted @ 2021-12-15 11:03  ccme  阅读(41)  评论(0)    收藏  举报