Redis内部数据结构详解(4)——ziplist


本文是《Redis内部数据结构详解》系列的第四篇。在本文中,我们首先介绍一个新的Redis内部数据结构——ziplist,然后在文章后半部分我们会讨论一下在robj, dict和ziplist的基础上,Redis对外暴露的hash结构是怎样构建起来的。

我们在讨论中还会涉及到两个Redis配置(在redis.conf中的ADVANCED CONFIG部分):

hash-max-ziplist-entries 512
hash-max-ziplist-value 64

本文的后半部分会对这两个配置做详细的解释。

阅读全文 »


用树型模型管理App数字和红点提示


我们平常接触到的大部分App,在收到新消息的时候一般都会以数字或红点的形式提示出来。比如在微信当中,当某位好友给我们发来新的聊天消息的时候,在相应的会话上就会有一个数字来表示未读消息的数目;再比如当微信朋友圈里有人发布新的内容时,朋友圈的入口就会出现一个红点,而当朋友圈里有人给我们点了赞,或者对我们发布的内容进行了评论的时候,朋友圈的入口就会显示一个数字。

但是,我们在试用一些新的App产品时,总会发现它们在数字和红点展示上存在各种各样的问题。比如,红点怎么点击也清除不掉;或者,发现有数字了,点进去却什么也没有;或者,点进去看到的数字和外面看到的不一样。

那这些问题到底是怎样产生的呢?

阅读全文 »


女儿和她的图画书


女儿爱读书。

对于一个小孩子来讲,什么叫做爱读书呢?

一岁之前的小孩子,抓起小画书就往小嘴里送,急切地想要尝尝它的味道,就是爱读书了。

两岁之前的小孩子,终于明白书原来不是什么好吃的东西,能克制住不把图书撕成纸片,就是爱读书了。

阅读全文 »


Redis内部数据结构详解(3)——robj


本文是《Redis内部数据结构详解》系列的第三篇,讲述在Redis实现中的一个基础数据结构:robj。

那到底什么是robj呢?它有什么用呢?

阅读全文 »


Redis内部数据结构详解(2)——sds


本文是《Redis内部数据结构详解》系列的第二篇,讲述Redis中使用最多的一个基础数据结构:sds。

不管在哪门编程语言当中,字符串都几乎是使用最多的数据结构。sds正是在Redis中被广泛使用的字符串结构,它的全称是Simple Dynamic String。与其它语言环境中出现的字符串相比,它具有如下显著的特点:

  • 可动态扩展内存。sds表示的字符串其内容可以修改,也可以追加。在很多语言中字符串会分为mutable和immutable两种,显然sds属于mutable类型的。
  • 二进制安全(Binary Safe)。sds能存储任意二进制数据,而不仅仅是可打印字符。
  • 与传统的C语言字符串类型兼容。这个的含义接下来马上会讨论。

阅读全文 »


Redis内部数据结构详解(1)——dict


如果你使用过Redis,一定会像我一样对它的内部实现产生兴趣。《Redis内部数据结构详解》是我准备写的一个系列,也是我个人对于之前研究Redis的一个阶段性总结,着重讲解Redis在内存中的数据结构实现(暂不涉及持久化的话题)。Redis本质上是一个数据结构服务器(data structures server),以高效的方式实现了多种现成的数据结构,研究它的数据结构和基于其上的算法,对于我们自己提升局部算法的编程水平有很重要的参考意义。

当我们在本文中提到Redis的“数据结构”,可能是在两个不同的层面来讨论它。

阅读全文 »


做人生大戏的主角——《红衫》读后


当你在压力日趋增大的现代社会中疲于奔命的时候,又或者当诸多意想不到的失意或失败已经成为过去,你又重新鼓足勇气面对新的生活踌躇满志的时候,下面这种想法是否曾经在你脑海中出现过,哪怕只有一瞬?那就是:现实世界只不过是某个至高无上的存在——我们也许可以称其为上帝——所导演的一出情节太过跌宕的戏剧,又或者是一部沉闷无聊的电视剧。不管它是什么,关键是并非所有情节都按你预想的发展。更糟糕的是,也许当我们走到人生的终点,在这场人生大戏中准备谢幕的那一天,我们才发现,自己只不过是这场拙劣戏剧的一个小小的龙套而已,从头至尾也没有得到导演(上帝)的多少眷顾。

阅读全文 »


小孩子的魔法


如果不是恰好你家里也有一个五岁的小女孩的话,你就不会理解《冰雪奇缘》在这个年龄的小孩子心中的分量,也不会理解艾莎公主在幼儿园小朋友当中深受喜爱的程度。

在送女儿去幼儿园的路上,我们又一次聊起了艾莎。

“你喜欢艾莎还是安娜呢?”我问她。

“我喜欢艾莎。”女儿毫不犹豫地说。

“为什么呢?”

“因为艾莎会魔法。”

阅读全文 »