0%

概念

维基百科:
字节顺序,又称端序或尾序(英语:Endianness),在计算机科学领域中,指存储器中或在数字通信链路中,组成多字节的字的字节的排列顺序。

阅读全文 »

源码位置:intset.c/intset.h

intset用来实现redis的set对象的数据结构之一(当元素较少且为数字类型时)。
为了节省内存的使用,创建intset的时候,使用最小的int类型(int16_t),当插入的整数大于int16_t时,将会进行对应的字节提升(int32_t或者int64_t),这种提升是不可逆的。

阅读全文 »

源码位置:hyperloglog.c

hyperloglog是一种算法,它提供了不精确的去重计数方案。redis的hyperloglog内部维护了16384个桶来记录各自桶的元素数量,当一个元素到来时,它会散列到其中一个桶,以一定的概率影响到这个桶的计数值。因为是概率算法,所以单个桶的计数值并不准确,但是将所有桶的计数值进行调合均值累加起来后,结果就会非常接近真实的计数值。

阅读全文 »

源码位置:dict.c/dict.h

Redis的字典是由两个HashTable(后面简称ht[0]、ht[1])构成,与其他字典不同的是,当当前的hashtable负载过高时,redis的字典会进行rehash(重新计算hash),rehash的过程是渐进式的,并不会一下子把所有的数据转移到另一张hashtable中,否则那样会造成服务短暂时间内无法使用。

阅读全文 »

源码位置:sds.c/sds.h

因为C语言没有实现动态字符串,所以redis实现了sds(simple dynamic string)简单动态字符串。既然是动态的,意味着它是能够支持修改的。​虽然是简单的动态字符串,但是redis为了省内存,快速获得字符串长度等需求,redis作者在结构上可是煞费苦心了。​

阅读全文 »

源码位置:zmalloc.c/zmalloc.h

因为Redis没有自己实现内存池,所以系统内存分配器的性能及碎片率会对redis造成一些性能上的影响。
Redis采用了3种内存分配器:tcmalloc、jemalloc、malloc。
Redis在编译时,首先会判断是否使用tcmalloc,其次是jemalloc,如果都没有使用,则使用libc中的内存管理函数malloc。

阅读全文 »

STL容器可以分为以下几大类:
① 序列容器:vector、list、deque、string
② 关联容器:set、multiset、unorderd_set、unorderd_multiset、map、multimap、unorderd_map、unorderd_multimap
③ 其他容器:stack、queue、valarray、bitset

阅读全文 »