架构是对客观不足的妥协,规范是对主观不足的妥协

Thinking will not overcome fear but action will.

Redis驱逐和淘汰Key

Redis驱逐和驱逐Key 我们知道del命令会主动删除数据,还有什么情况数据能删除呢?在内存满的时候Redis会如何应对呢?Key到达过期时间会被立刻删除吗?删除大Key会影响性能吗?异步删除是怎么回事呢?如下我们一同探讨。 一. 同步和异步删除 [前赴后继,一呼百应] DEL 和 UNLINK Redis服务自身对Key的删除,可以分为「同步删除」和「异步删除」。...

C++标准库

容器 Containers C++11 新增。提供了容器类模板 std::array,固定大小数组的容器。 提供了专门用来存放位组(一系列 bit)的容器类 std::bitset。 提供了双向队列容器类模板 std::deque。 C++11 新增。提供了单向链表容器类模板 std::forward_list。 提供了双向链表容器类模板 std::list。 <...

Zset对象的底层编码

Redis对象层

ZSET对象的底层编码 可以使用ziplist与skiplist作为底层编码; 有序集合对象的每个元素,成员都是一个字符串对象,分值都是一个double类型的浮点数; 这又是对象依赖对象的一个例子; 1. ziplist 使用压缩列表作为底层实现,那么,每个集合元素使用两个相邻的ziplist节点来保存; 第一个节点保存元素的成员(member),第二个元素保...

Set对象的底层编码

Redis对象层

SET对象的底层编码 SET对象的底层编码可以是intset或者dict; 1. 使用intset做底层实现 2. 使用dict做底层实现 3. 编码转换 当集合对象可以同时满足下面两个条件时,使用intset编码,否则使用hashtable编码。 集合对象保存的所有元素都是整数; 集合对象保存的元素数量不超过512个; ...

Hash对象的底层编码

Redis对象层

Hash对象的底层编码 当哈希对象可以同时满足以下两个条件时,会使用ziplist作为底层实现,其他情况,使用hashtable编码; a. 哈希对象保存的所有键值对的key与value的字符串长度都小于64字节; b. 哈希对象保存的键值对数量小于512个; 这两个条件可以在redis.conf中修改。 hash-max...

LIST对象的底层编码

Redis对象层

LIST对象的底层编码 1. 知识 列表对象的编码可以是ziplist(压缩链表)或者linkedlist(双端链表); 源码: object.c 使用ziplist编码的条件: 列表对象保存的所有字符串元素的长度都少于64字节; 列表对象保存的元素数量小于512个; 使用linkedlist编码的条件: ...

string对象的底层编码

Redis对象层

string对象的底层编码 1. REDIS_ENCODING_INT 又叫长整型编码 如果对象保存的是整数值,一般可以用long int类型来表示; 现在很多服务器上,long int是64位的,所以当你保存一个 (-2^64/2,2^64/2)时,会用该底层编码保存; 它直接依赖了C的数据类型,而没有依赖redis的任何底层支撑(如sds,intset等); ...