Redis的设计与实现(5)-整数集合】的更多相关文章

整数集合(intset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现. intset可以保存类型为int16_t,int32_t,int64_t的整数值,并且保证集合中不会出现重复元素. 整数集合的结构体定义在intset.h中: typedef struct intset { uint32_t encoding; uint32_t length; int8_t contents[]; } intset; enc…
Redis 有 5 种基础数据结构,分别为:string (字符串).list (列表).set (集合).hash (哈希) 和 zset (有序集合). 今天来说一下set(集合)这种存储结构,set这种结构相当于java中的hashSet这种结构,存储到set中的元素是无序不重复的 向set中存储数据:sadd books java 从上面图中可以看出,是不能存储相同的元素的. 从set中获取全部元素:smembers books 从上图中可以看出,获取全部的元素是无序的 从set中随机的…
文中内容摘自<redis设计与实现> 简单动态字符串 1. Redis只会使用C字符串作为字面量,在大多数情况下,Redis使用SDS(Simple Dynamic String,简单动态字符串)作为字符串表示. 2. SDS包含以下三个属性: 1). free : 记录buf数组中未使用字节的数量 2). len : 记录buf数组中已使用自己的数量,等于SDS所保存字符串的长度 3). buf : char类型数组,用于保存字符串,最后一个字节是一个空字符'\0' 3. SDS遵循C字符串…
整数集合 Redis 中当一个集合(set)中只包含整数,并且元素不多时,底层使用整数集合实现,否则使用字典实现. 那么: 为什么会出现整数集合呢?都使用字典存储不行吗? 整数集合在 Redis 中的结构是怎样的呢? 引入整数集合之后,会不会出现什么弊端?Redis 又是如何去解决的呢? 为什么会出现整数集合呢?都使用字典存储不行吗? 说起无序集合(set),很自然的就想起哈希表,而哈希表表现也很好,提供了查询为 O(1) 的时间复杂度.但任何事物有优点,就必然会伴随着一些缺点,哈希表的缺点就是…
前言     整数集合(intset)并不是一个基础的数据结构,而是Redis自己设计的一种存储结构,是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时, Redis i就会使用整数集合作为集合键的底层实现. 一.整数集合实现     整数集合(intset)是Redis用于保存整数值的集合抽象数据结构,它可以保存类型为int16_t.int32_t或者int64_t的整数值,并且保证集合中不会出现重复元素. //每个intset结构表示一个整数集合 typedef…
redis有五种数据类型string.list.hash.set.zset(字符串.哈希.列表.集合.有序集合)并且自实现了简单动态字符串.双端链表.字典.压缩列表.整数集合.跳跃表等数据结构.redis底层使用了多种数据结构来实现各种特性.对于Redis底层实现的了解,可以让我们对Redis工作原理更加清晰. 那么redis数据结构与内部编码,如下图: redis对象(redisObject) redis源码内部是有一个redisObject对象,redis的键值都是redisObject对象…
redis源码分析系列文章 [Redis源码系列]在Liunx安装和常见API 为什么要从Redis源码分析 String底层实现——动态字符串SDS 双向链表都不懂,还说懂Redis? 面试官:说说Redis的Hash底层 我:......(来自阅文的面试题) Redis的跳跃表确定不了解下 前言 大噶好,今天仍然是元气满满的一天,抛开永远写不完的需求,拒绝要求贼变态的客户,单纯的学习技术,感受技术的魅力.(哈哈哈,皮一下很开森) 前面几周我们一起看了Redis底层数据结构,如动态字符串SDS…
文章参考:<Redis 设计与实现>黄建宏 整数集合 整数集合时集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合数量不多时,就会使用整数集合 typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 int8_t contents[]; } intset; Contents 数组是整数集合的底层实现:每个项在数组中从小到大有序的排列,并且不包含重复项 le…
intset介绍 intset 整数集合,当一个集合只有整数元素,且元素数量不多时,Redis 就会用整数集合作为集合键的底层实现. redis> SADD numbers 1 3 5 7 9 (integer 5) redis> OBJECT ENCODING numbers (inset) 为什么要用 intset? 集合键的另外一种实现是值为空的散列表(hash table),当元素比较少时,用hash table 存就比较浪费内存,而用 intset 就比较节约内存. 整数集合实现 i…
redis intset (整数集合) 概述 intset 是集合的底层实现结构之一 intset 集合只包含整数 intset 自升级 intset 整数集合是有序的 intset 结构 结构 // 整数集合 typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 int8_t contents[]; } intset; encoding // intset 的编码方…