【算法实战】Redis 数据结构总结

目录

 

Redis说明

键数据类型:

值数据类型:

Redis底层数据结构

压缩列表

有序数组

散列表

跳表

双向链表:

Redis “值”的数据类型

字符串:字符串

列表(list):压缩列表(ziplist)、双向循环链表

字典(hash):压缩列表、散列表

集合(set):有序数组、基于散列表;

有序集合(sortedset):压缩列表、跳表

持久化


Redis说明

被叫作非关系型数据库,通过“键”来查询“值”,被用作内存数据库,支持将数据存储在硬盘;

键数据类型:

字符串;

值数据类型:

字符串、列表、字典、集合、有序集合;

Redis底层数据结构

  • 压缩列表:

    • 比数组节省内存,数组固定单元;支持多种类型、连续内存、读取效率高;
  • 有序数组

    •  
  • 散列表

    • 散列函数生成的值要尽可能随机并且均匀分布;
  • 跳表

    •  
  • 双向链表:

    • listnode包含前、后指针;list包含首、尾指针和长度;       
// 以下是C语言代码,因为Redis是用C语言实现的。
typedef struct listnode {
  struct listNode *prev;
  struct listNode *next;
  void *value;
} listNode;


typedef struct list {
  listNode *head;
  listNode *tail;
  unsigned long len;
  // ....省略其他定义
} list;

Redis “值”的数据类型

  • 字符串:字符串

  • 列表(list):压缩列表(ziplist)、双向循环链表

    • 压缩列表2个必要条件:
      • 列表中保存的单个数据(有可能是字符串类型的)小于 64 字节;
      • 列表中数据个数少于 512 个。
  • 字典(hash):压缩列表、散列表

    • 压缩列表2个必要条件:
      • 字典中保存的键和值的大小都要小于 64 字节;
      • 字典中键值对的个数要小于 512 个。
    • 散列表哈希函数:MurmurHash2,速度快、随机性;
    • 哈希冲突:链表法;
    • 动态扩容、缩容:装载因子>1扩容为2倍左右;当装载因子小于 0.1缩容2倍左右;
    • 扩容、缩容:散列表渐进式、分批扩容,避免大量数据一次性搬移导致的服务停顿;
  • 集合(set):有序数组、基于散列表;

    • 有序数组的2个必要条件:
      • 存储的数据都是整数;
      • 存储的数据元素个数不超过 512 个。
  • 有序集合(sortedset):压缩列表、跳表

    • 数据会附带得分,可按照得分值、得分区间获取数据
    • 压缩列表2个必要条件:
      • 所有数据的大小都要小于 64 字节;
      • 元素个数要小于 128 个。
  • 持久化

    • 第一种:是清除原有的存储结构,只将数据存储到磁盘中。还原数据到内存需要重新数据组织数据结构。Redis 采用的就是这种持久化思路。
    • 第二种:方式是保留原来的存储格式,将数据按照原有的格式存储在磁盘中

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值