IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> redis设计与实现 笔记 -> 正文阅读

[大数据]redis设计与实现 笔记

字符串

redis的字符串使用SDS(redis自己实现的字符串)实现,
C字符串strcat(拼接字符串)前不会检测字符串长度是否足够而发生溢出问题。SDS在执行sdscat(字符串拼接)前会检测空间是否足够而实现分配好空间。
C字符串计算长度需遍历字节长度,SDS可以直接访问len属性获取长度。

在这里插入图片描述
SDS用free属性记录当前字符串数组未使用的字节数。
修改SDS时,当需要扩容时会增加SDS修改后的字节数组大小(原长度1,改成成5,扩容成12,(1+5)*2),不需扩容则不需要;当需要缩容时,不会直接释放空间,而是留空,以应对后续的修改扩容操作,等下次再调用时再进行空间释放。
C字符串以识别到空字符 '/0’就判断此字符串结束,故不能使用此字符串保留二进制文件。SDS以处理二进制的方式处理存放在buf数组的数据,可以存储文件。SDS字符串也以空字符 ‘/0’ 结尾,这是为了可以重用string.h的一部分函数,通过对空字符的转义实现共用。

在这里插入图片描述
在这里插入图片描述

链表

双链:链表节点带有prev和next指针,获取某个节点的前置节点和后置节点的复杂度都是O(1).。
无环:表头节点的prev指针和表尾节点的next指针都指向NULL,对链表的访问以NULL为终点。
带表头指针和表尾指针:通过list结构的head指针和tail指针,程序获取链表的表头节点和表尾节点的复杂度为O(1)。
带表头长度计数器:程序使用list结构的len属性来对list持有的链表节点进行计数,程序获取链表中节点数量的复杂度为O(1)。
多态:链表节点使用void* 指针来保存节点值,并且可以通过list结构的dup、free、match三个属性为节点只设置类型特定函数,所以链表可以用于保存各种不同类型的值。

在这里插入图片描述
head:表头节点
tail:表尾节点
len:链表所包含的节点数量
dum函数:用于复制链表节点所报保存的值。
free函数:用于释放链表节点所保存的值。
match函数:用于对比链表节点所保存的值和另一个输入值是否相等。

hash

hash组成:两个数组,一个数组指向一个链表数组,链表数组存储元素。另一个数组扩容使用。
hash计算负载因子方式:used(元素个数) / size(链表数组长度),大于1则扩容,小于0.1则缩容。hash维护了两个链表数组,一个使用,另一个rehash(扩容)使用,扩容完舍弃第一个数组,第二个提到第一个,再创建一个第二个数组。扩容为第一个数组已使用长度两倍的第一个2的n次方(例:长度是5,则扩容后长度为5*2,离他最近的2的n次发是16,故扩容后长度是16),缩容操作为第一个大于大于已使用长度的2的n次方(例:已使用长度为3.则缩容后长度为4)。
hash的负载因子计算方式为:元素数 / 链表数组长度,也就是hash的链表数组下标一个元素,多一个直接扩容。
当以下条件的任意一个被满足时,程序会自动开始对哈希表执行扩容操作:
	1)、服务器目前没有在执行BGSAVE命令或BGREWRITEAOF命令,并且哈希表的负载因子大于等于1。
	2)、服务器目前正在执行BGSAVE命令或BGREWRITEAOF命令,并且哈希表的负载因子大于等于5。
hash在扩容时,采用写时复制(copy and write)来优化子进程的使用效率,因此在BGSAVE期间,尽可能避免进行hash扩容操作。
扩容不是一次完成,而是分多次、渐进式的rehash。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:59:51  更:2021-12-28 23:02:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:24:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码