学习【Redis原理篇】这一篇就够了

1. 数据结构

1-1. 动态字符串(SDS)

我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。

不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题:

  • 获取字符串长度的需要通过运算
  • 非二进制安全
  • 不可修改

Redis构建了一种新的字符串结构,称为简单动态字符串(Simple Dynamic String),简称SDS。

Redis是C语言实现的,其中SDS是一个结构体,源码如下:

在这里插入图片描述

相比于C语言字符串的优点:

  • 获取字符串长度的时间复杂度为O(1)
  • 支持动态扩容
  • 减少内存分配次数
  • 二进制安全

1-2. intset

IntSet是Redis中set集合的一种实现方式,基于整数数组来实现,并且具备长度可变有序等特征。

结构如下:

在这里插入图片描述

其中的encoding包含三种模式,表示存储的整数大小不同:

在这里插入图片描述

Intset可以看做是特殊的整数数组,具备一些特点:

  • Redis会确保Intset中的元素唯一有序
  • 具备类型升级机制,可以节省内存空间
  • 底层采用二分查找方式来查询

1-3. Dict

我们知道Redis是一个键值型(Key-Value Pair)的数据库,我们可以根据键实现快速的增删改查。而键与值的映射关系正是通过Dict来实现的。

Dict由三部分组成,分别是:哈希表(DictHashTable)、哈希节点(DictEntry)、字典(Dict)

Dict的结构:

  • 类似java的HashTable,底层是数组加链表来解决哈希冲突
  • Dict包含两个哈希表,ht[0]平常用,ht[1]用来rehash

Dict的伸缩:

  • 当LoadFactor大于5或者LoadFactor大于1并且没有子进程任务时,Dict扩容
  • 当LoadFactor小于0.1时,Dict收缩
  • 扩容大小为第一个大于等于used + 1的2^n
  • 收缩大小为第一个大于等于used 的2^n
  • Dict采用渐进式rehash,每次访问Dict时执行一次rehash
  • rehash时ht[0]只减不增,新增操作只在ht[1]执行,其它操作在两个哈希表

2. 网络模型

3. 通信协议

4. 内存策略

相关推荐

  1. 入门SAM看

    2024-04-01 22:52:06       38 阅读
  2. Rust async,看

    2024-04-01 22:52:06       36 阅读
  3. 关于基本算法思想

    2024-04-01 22:52:06       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-01 22:52:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-01 22:52:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-01 22:52:06       82 阅读
  4. Python语言-面向对象

    2024-04-01 22:52:06       91 阅读

热门阅读

  1. python 埃氏筛法判断一个数是否为素数

    2024-04-01 22:52:06       40 阅读
  2. ChatGPT:让学术写作更高效

    2024-04-01 22:52:06       36 阅读
  3. 大模型日报2024-04-01

    2024-04-01 22:52:06       44 阅读
  4. Leetcode 3097. Shortest Subarray With OR at Least K II

    2024-04-01 22:52:06       40 阅读
  5. C# 值类型和引用类型

    2024-04-01 22:52:06       30 阅读
  6. 数据预处理-平均值插值法

    2024-04-01 22:52:06       33 阅读
  7. AI大模型学习:跨越数学、编程与业务的桥梁

    2024-04-01 22:52:06       42 阅读
  8. c++ 小游戏(2种)

    2024-04-01 22:52:06       29 阅读
  9. 氯丁橡胶衬板是什么

    2024-04-01 22:52:06       32 阅读
  10. 二阶系统与环境相互作用

    2024-04-01 22:52:06       33 阅读
  11. 自定义函数的使用

    2024-04-01 22:52:06       40 阅读