Redis数据结构和对象三
1.Redis 对象系统
Redis用到的所有主要数据结构,简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合、跳跃表。
Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,而每种对象又通过不同的编码映射到不同的底层数据结构。
typedef struct redisObiect{
//类型
unsigned type:4;
//编码
unsigned encoding:4;
//指向底层数据结构的指针
void *ptr;
}
类型:type
对象的type属性记录了对象的类型,这个属性值是常量之一
REDIS_STRING=字符串对象,REDIS_LIST=列表对象,REDIS_HASH=哈希对象,REDIS_SET=集合对象,REDIS_ZSET=有序集合对象
编码和底层实现
对象的ptr指针指向对象的底层实现的数据结构,而这些数据结构由对象的encoding属性决定的。下列常量之一
| 编码常量 | 编码对应的底层数据结构 | 
|---|---|
| REDIS_ENCODING_INT | Long类型整数 | 
| REDIS_ENCODING_EMBSTR | embstr编码的简单动态字符串 | 
| REDIS_ENCODING_RAW | 简单动态字符串 | 
| REDIS_ENCODING_HT | 字典 | 
| REDIS_ENCODING_LINKEDLIST | 双端链表 | 
| REDIS_ENCODING_ZIPLIST | 压缩列表 | 
| REDIS_ENCODING_INTSET | 整数集合 | 
| REDIS_ENCODING_SKIPLIST | 跳跃表和字典 | 
Redis数据结构和对象三的更多相关文章
- redis数据结构和对象二
		
跳跃表(skiplist) 跳跃表是一种有序数据结构.跳跃表支持平均O(logN),最坏O(N)复杂度的节点查找,大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为跳跃表的实现比平衡树简单,所有不 ...
 - redis数据结构和对象一
		
1. SDS:简单动态字符串(simple dynamic string) Redis没有直接使用C语言的字符串,而是自己构建了一种名为简单动态字符串类型,并将SDS用作Redis的默认字符串. SD ...
 - Redis学习笔记一:数据结构与对象
		
1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...
 - redis 系列9 对象类型(字符串,哈希,列表,集合,有序集合)与数据结构关系
		
一.概述 在前面章节中,主要了解了 Redis用到的主要数据结构,包括:简单动态字符串.链表(双端链表).字典.跳跃表. 整数集合.压缩列表(后面再了解).Redis没有直接使用这些数据结构来实现键值 ...
 - Redis 的底层数据结构(对象)
		
目前为止,我们介绍了 redis 中非常典型的五种数据结构,从 SDS 到 压缩列表,这都是 redis 最底层.最常用的数据结构,相信你也掌握的不错. 但 redis 实际存储键值对的时候,是基于对 ...
 - [redis读书笔记] 第一部分 数据结构与对象  对象类型
		
- 从前面redis的基本数据结构来看,可以看出,redis都是在基本结构(string)的基础上,封装了一层统计的结构(SDS),这样让对基本结构的访问能够更快更准确,提高可控制度. - redis ...
 - Redis 基础数据结构与对象
		
Redis用到的底层数据结构有:简单动态字符串.双端链表.字典.压缩列表.整数集合.跳跃表等,Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包 ...
 - Redis | 第一部分:数据结构与对象 上篇《Redis设计与实现》
		
目录 前言 1. 简单动态字符串 1.1 SDS的定义 1.2 空间预分配与惰性空间释放 1.3 SDS的API 2. 链表 2.1 链表与节点的定义 2.2 链表的API 3. 字典 3.1 哈希表 ...
 - Redis | 第一部分:数据结构与对象 下篇《Redis设计与实现》
		
目录 前言 1. Redis对象概述 1.1 对象的定义 2. 字符串对象 3. 列表对象 3.1 quicklist 快速链表 4. 哈希对象 5. 集合对象 6. 有序集合对象 7. Redis对 ...
 
随机推荐
- Pytest(1)安装与入门
			
pytest介绍 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高.根据pytest的官方网站介绍,它 ...
 - Codeforces Round #585 (Div. 2) E. Marbles(状压dp)
			
题意:给你一个长度为n的序列 问你需要多少次两两交换 可以让相同的数字在一个区间段 思路:我们可以预处理一个数组cnt[i][j]表示把i放到j前面需要交换多少次 然后二进制枚举后 每次选择一个为1的 ...
 - Codeforces Round #678 (Div. 2)【ABCD】
			
比赛链接:https://codeforces.com/contest/1436 A. Reorder 题解 模拟一下这个二重循环发现每个位置数最终都只加了一次. 代码 #include <bi ...
 - HDU 1564 Play a game && HDU 2147 kiki's game
			
HDU 1564 Play a game题意: 棋盘的大小是n*n.一块石头被放在一个角落的广场上.他们交替进行,8600人先走.每次,玩家可以将石头水平或垂直移动到一个未访问的邻居广场.谁不采取行动 ...
 - hdu3506 Monkey Party
			
Problem Description Far away from our world, there is a banana forest. And many lovely monkeys live ...
 - 牛客练习赛70 A.重新排列  (,字符串思维)
			
题意:有一个模板串,给你\(T\)个字符串,选取最短的子串,使其重新排列后包含模板串,求最短的子串的长度 题解:遍历字符串,记录每个字符出现的最后位置,每记录一个后再遍历子串,找到子串需要的所有的字符 ...
 - Codeforces Round #670 (Div. 2)  A. Subset Mex  (贪心)
			
题意:给你一长度为\(n\)的序列,将其分为两个集合,求两个集合中未出现的最小元素的最大值, 题解:用桶存一下每个元素的个数,两次枚举\([1,100]\),找出两个最小值即可. 代码: int t; ...
 - 国产网络损伤仪 SandStorm -- 什么是链路规则?
			
"链路规则"是网络损伤仪SandStorm(又名弱网测试仪)里面非常重要的功能,主要用于不同仿真链路之间的选择. 如下图的所示: ...
 - Python_K-means算法
			
from sklearn import cluster [centroid, label, inertia] = cluster.k_means(data_to_be_classified, num_ ...
 - css background transparent All In One
			
css background transparent All In One opacity ul { max-height: 100px; /* max-height: 187px; */ overf ...