Redis入门

242 阅读2分钟

一、Redis产生的背景故事

LLOOGG.com是一个访客信息追踪网站,网站可以通过JavaScript脚本,将访客的IP地址、所属国家、阅览器信息、被访问页面的地址等数据传送给LLOOGG.com后台服务。后台会将这些浏览数据通过web页面实时地展示给用户, 并储存起最新的5至10,000条浏览记录以便进行查阅。

为了记录每个被追踪网站的浏览信息,LLOOGG.com需要为每个被追踪的网站创建一个列表(list)。并且,每个列表需要根据用户的设置,储存最新的5至10,000条浏览记录。每当某个被追踪的网站新增一条 浏览记录时, LLOOGG.com就会将这条新的浏览记录推入 (push)到与该网站相对应的列表里面,当列表的长度超过用户指定的最大长度时,程序每向列表推入一条新的记录,就需要从列表中 弹出(pop)一条最旧的记录。

image.png

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

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

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

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

image.png