整数集合

整数集合

整数集合的升级

升级整数集合并添加新元素的步骤:

  • 1、根据新元素的类型, 扩展整数集合底层数组的空间大小, 并为新元素分配空间。
  • 2、将底层数组现有的所有元素都转换成与新元素相同的类型, 并将类型转换后的元素放置到正确的位上, 而且在放置元素的过程中, 需要继续维持底层数组的有序性质不变。
  • 3、将新元素添加到底层数组里面。
  • 4、改变程序将整数集合 encoding 属性的值。

升级之后新元素的摆放位置

因为引发升级的新元素的长度总是比整数集合现有所有元素的长度都大, 所以这个新元素的值要么就大于所有现有元素, 要么就小于所有现有元素:

  • 在新元素小于所有现有元素的情况下, 新元素会被放置在底层数组的最开头(索引 0 );
  • 在新元素大于所有现有元素的情况下, 新元素会被放置在底层数组的最末尾(索引 length-1 )。

整数集合的降级

整数集合不支持降级操作, 一旦对数组进行了升级, 编码就会一直保持升级后的状态。

对象

查看对象类型type

type test

类型常量 对象的名称 TYPE 命令的输出
REDIS_STRING 字符串对象 string
REDIS_LIST 列表对象 list
REDIS_HASH 哈希对象 hash
REDIS_SET 集合对象 set
REDIS_ZSET 有序集合对象 zset

查看数据库值对象OBJECT ENCODING key

object encloding test

对象所使用的底层数据结构 编码常量 OBJECT ENCODING 命令输出
整数 REDIS_ENCODING_INT "int"
embstr 编码的简单动态字符串(SDS)REDIS_ENCODING_EMBSTR "embstr"
简单动态字符串 REDIS_ENCODING_RAW "raw"
字典 REDIS_ENCODING_HT "hashtable"
双端链表 REDIS_ENCODING_LINKEDLIST "linkedlist"
压缩列表 REDIS_ENCODING_ZIPLIST "ziplist"
整数集合 REDIS_ENCODING_INTSET "intset"
跳跃表和字典 REDIS_ENCODING_SKIPLIST "skiplist"

字符串对象

embstr 编码的字符串对象在执行命令时, 产生的效果和 raw 编码的字符串对象执行命令时产生的效果是相同的, 但使用 embstr 编码的字符串对象来保存短字符串值有以下好处:

  • embstr 编码将创建字符串对象所需的内存分配次数从 raw 编码的两次降低为一次。
  • 释放 embstr 编码的字符串对象只需要调用一次内存释放函数, 而释放 raw 编码的字符串对象需要调用两次内存释放函数。
  • 因为 embstr 编码的字符串对象的所有数据都保存在一块连续的内存里面, 所以这种编码的字符串对象比起 raw 编码的字符串对象能够更好地利用缓存带来的优势。

embstr 编码的字符串对象实际上是只读的: 当我们对 embstr 编码的字符串对象执行任何修改命令时, 程序会先将对象的编码从 embstr 转换成 raw , 然后再执行修改命令; 因为这个原因, embstr 编码的字符串对象在执行修改命令之后, 总会变成一个 raw 编码的字符串对象。

时间: 2024-10-14 14:55:33

整数集合的相关文章

c++-编写程序,求两个整数集合的并集。。。

问题描述 编写程序,求两个整数集合的并集... 编写程序,求两个整数集合的并集...能不能把下面这个修改一下??如果可以,再写一个完整的程序也可以 解决方案 这是按照你的思路写的(假设a b两个数组内没有重复的数字) #include <iostream> #include <stdlib.h> using namespace std; void arrunion(int a[], int b[], int r[], int an, int bn, int * n) { *n =

[redis设计与实现][5]基本数据结构——整数集合

整数集合(intset)用于集合键.当一个集合只包含整数值元素,并且数量不多的时候,会使用整数集合作为集合键的底层实现.相对于直接保存字符串,整数集合能够很好地节约内存,但是由于是数组保存,需要特别关注数组长度. 定义:(intset.h) [cce lang="c"] typedef struct intset { //编码方式 uint32_t encoding; //集合包含的元素数量 uint32_t length; //保存元素的数组 int8_t contents[]; }

isl 0.10发布 整数集合库

isl 是Integer Set Library的简写,是一款操作集和线性约束范围内整数点关系的库.支持的操作集包括:交集.并集.差集.空虚检查,凸壳.仿射包(整数).整数投影,以及使用参数整数规划进行最小限度的字典计算.它还包括一个整数的规划求解基于广义的基础. &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; isl 0.10该版本支持多准仿射表达的改善和修复各种小错误. 软件信息:http://www.kot

[经典面试题][腾讯]集合差集

[题目] A.B两个整数集合,设计一个算法求他们的交集,尽可能的高效. [来源] 腾讯2014校招软件开发笔试题目 [思路一] 对集合A和集合B进行排序(升序,用快排,平均复杂度O(N*logN)). 设置两个指针p和q,同时指向集合A和集合B的第一个元素(已经升序排序).用一个容器vector记录集合的交集. 如果两个元素大小相等的,说明是集合交集元素,加入交集vector中: 如果两个元素大小不相等的,p和q中较小值的指针,指向下一个元素. 依次操作,直到其中一个集合没有元素可比较为止. 排

Redis开发与运维. 2.5 集合

2.5 集合 集合(set)类型也是用来保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素.如图2-22所示,集合user:1:follow包含着"it"."music". "his"."sports"四个元素,一个集合最多可以存储232-1个元素.Redis除了支持集合内的增删改查,同时还支持多个集合取交集.并集.差集,合理地使用好集合类型,能在实际开发中

[实变函数]1.1 集合的表示

1 集合 (Set): 若干事物的全体 (朴素的语言)       (1) 例子:          $\bbN$ 自然数集合 (natural numbers);          $\bbZ$ 整数集合 (Zahlen 德语);          $\bbQ$ 有理数集合 (quotients);          $\bbR$ 实数集合 (real numbers).      (2) 表示法:          列举 $\bbN=\sed{0,1,2,3,\cdots}$;       

一些面试题,整理自网络,就不一一帖原址了

腾讯面试题:tcp三次握手的过程,accept发生在三次握手哪个阶段? 答accept发生在三次握手之后. 第一次握手:客户端发送syn包(syn=j)到服务器. 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个ASK包(ask=k). 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1). 三次握手完成后,客户端和服务器就建立了tcp连接.这时可以调用accept函数获得此连接.   const的含义及实现机制,比

Java 下一代: 没有继承性的扩展(三)

Groovy 元编程为您提供常见问题的简单解决方案 Java 下一代语言扩展现有的类和其他构件的方法有很多,前两期 Java 下一代 文章探讨了其中的一些方法.在本期文章中,我将继续该探索,仔细查看在多种上下文中实现扩展的 Groovy 元编程技术. 在 "没有继承性的扩展,第 1  部分" 中,在讨论使用类别类  和 ExpandoMetaClass 作为将新行为 "应用于" 现有类的机制时,我偶然接触了一些 Groovy 元编程特性.Groovy 中的元编程特性

UVa 10125:Sumsets

题目链接: UVa : http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1066 poj :   http://poj.org/problem?id=2549 类型: 哈希, 二分查找 原题: Given S, a set of integers, find the largest d such that a