Redis 是一个高性能的键-值存储(key-value store)的数据库,它用 C 语言开发,常用作缓存服务器,提供多种语言的 API,支持现阶段流行的大多数编程语言。但是,Redis 到底是如何诞生的呢?本文简单谈谈 Redis 的诞生及其历史背景。

1、Redis 之父

Redis 之父是 Salvatore Sanfilippo(网名:antirez),意大利人, 早年为系统管理员,关注计算机安全领域,于1999年发明了 idle scan 扫描技术,该技术在 nmap 扫描器上也有实现。

SalvatoreSanfilippo.jpg

2004 年 ~ 2006 年期间在做嵌入式方面的工作,并为此写了名为 Jim 的 Tcl 解释器以及其相关书籍和文档。(Redis 的事件处理器就重写于 Jim 的事件循环,而 Redis 的测试套件也也使用 Tcl 语言来写的)。除此之外,他在 2006 年还写了 Hping ——一个 TCP/IP 包分析器。

之后开始接触 Web,在 2007 年和另一个朋友共同创建了 LLOOGG.com,并因为解决这个网站的负载问题而在 2009 年 2 月 26 日发明了 Redis。

2、不得不说 LLOOGG.com

Redis 诞生背景是 LLOOGG.com,一个访客信息追踪网站,通过 JavaScript 脚本,将访客的 IP 地址、所属国家、浏览器信息、被访问页的地址等数据传送给 LLOOGG.com。然后 LLOOGG.com 将这些浏览数据通过 WEB 页面实时地展示给用户,并储存最新的 5 至 10,000 条浏览记录以便进行查阅,目前该网站已关闭。

lloogg.png

Google Analytics 直到 2011 年才有了实时功能,LLOOGG.com 的实时反馈想法在当时(2007 年)还是很有新意的。

如上文所述,LLOOGG.com 需要记录每个被追踪网站的浏览信息,即为每个被追踪的网站创建一个列表(List),每个列表根据用户的设置,储存最新的 5 至 10,000 条浏览记录。

llooggList.png

当某个被追踪的网站新增一条记录时,LLOOGG.com 就会将该记录推入(Push)到与该网站相对应的列表里面,当列表的长度超过用户指定的最大长度时,程序每向列表推入一条新的记录,就需要从列表中弹出(Pop)一条最旧的记录。

llooggPushPop.png

随着 LLOOGG.com 的用户日益增多,LLOOGG.com 要维护的列表数量也越来越多,要执行的推入和弹出操作也越来越多。当时 LLOOGG.com 使用 MySQL 数据库,该数据库每次执行推入和弹出操作都要进行硬盘写入和读取,程序的性能严重受制于硬盘 I/O。

最终,LLOOGG.com 所使用的 MySQL 再也没办法在其 VPS 上处理新增的大量负载,由于 LLOOGG.com 当时尚未找到盈利模式,为了尽量节约开支,antirez 没有选择直接升级 LLOOGG.com 的 VPS, 而是打算另寻办法——在现有硬件的基础上,通过提升列表操作的性能来解决负载问题。

3、Redis 诞生

为了在不升级 VPS 的前提下,解决 LLOOGG.com 的负载问题,antirez 决定自己写一个具有列表结构的内存数据库原型——支持 O(1) 复杂的推入和弹出操作,并且将数据储存在内存而不是硬盘,所以程序的性能不会受制于 I/O,可以以极快的速度执行针对列表的推入和弹出操作。

经过实验,这个原型的确可以在不升级 VPS 的前提下,解决 LLOOGG.com 当时的负载问题。于是antirez 使用 C 语言重写了这个内存数据库,并给他加上了持久化功能,由此,Redis 诞生了!

关于 Redis 的诞生暂时谈到这里,下篇文章将谈谈 为什么要选择 Redis

空非易文章均为原创,转载请以链接形式注明本文地址

本文地址:http://pengzhiyong.com/archives/How-Redis-was-born.html

作者:空非易 | 标签: | 浏览:1094