Redis随笔-rename效率问题

2018-11-12
阅读 3 分钟
9.6k
rename是redis中给key重命名命令,rename key newkey的意思就是将key重命名为newkey。大部分文档在介绍rename的时候只将它描述成一个时间复杂度为O(1)的命令,却忘了说明它可能导致的性能问题(涉及覆盖旧值的时候 时间复杂度应该是O(1)+O(M))。

Redis源码分析-压缩列表ziplist

2018-11-04
阅读 11 分钟
7.6k
ziplist是list键、hash键以及zset键的底层实现之一(3.0之后list键已经不直接用ziplist和linkedlist作为底层实现了,取而代之的是quicklist)这些键的常规底层实现如下:

Redis3.2源码分析-整数集合intset

2018-03-21
阅读 10 分钟
2.6k
intset是Redis集合的底层实现之一,当存储整数集合并且数据量较小的情况下Redis会使用intset作为set的底层实现。当数据量较大或者集合元素为字符串时则会使用dict实现set。intset将整数元素按顺序存储在数组里,并通过二分法降低查找元素的时间复杂度。数据量大时,依赖于“查找”的命令(如SISMEMBER)就会由于O(logn)的...

Redis3.2源码分析-跳跃表zskiplist

2018-02-27
阅读 13 分钟
7k
跳跃表是Redis zset的底层实现之一,zset在member较多时会采用跳跃表作为底层实现,它在添加、删除、查找节点上都拥有与红黑树相当的性能,它其实说白了就是一种特殊的链表,链表的每个节点存了不同的“层”信息,用这种分层存节点的方式在查找节点时能跳过些节点,从而使添加、删除、查找操作都拥有了O(logn)的平均时间复...

Redis3.2源码分析-字典dict

2018-01-17
阅读 20 分钟
2.9k
字典的目的是为了通过某个信息(key) 找到另一个信息(value)。为了快速从key找到value,字典通常会用hash表作为底层的存储,redis的字典也不例外,它的实现是基于时间复杂度为O(1)的hash算法(关于hash表的介绍可以参考《算法导论》"散列表"一章)redis中字典的主要用途有以下两个:

Redis源码分析-redis3.2-动态字符串sds

2017-12-03
阅读 12 分钟
4.1k
最近打算阅读redis源码,但是担心读完就忘了,所以决定把阅读的笔记在简书里记录起来,希望能够坚持读下去。之所以选择3.2是因为公司把redis升级成了这个版本。