一、Redis的诞生
Redis创建者,出生于西西里岛的意大利人(antirez)发明的,个人网站,http://invece.org。早年是系统管理员,2004-2006 年做嵌入式方面的工作,之后接触 WEB,2007 年和朋友共同创建了一个网站 LLOOGG.com,并为了解决这个网站的负载问题而在 2009 年发明了 Redis。有关大数据数据仓库问题,请看《传统数据库和数据仓库》
说到这个 LLOOGG.com 网站,我们来看看这个到底是个干嘛的网站,LLOOGG.com网站是一个访客信息追踪网站,网站可以通过 javascript 脚本,将访客的 IP 地址、所属国家、阅览信息、访问页面地址等数据传送给 LLOOGG.com。
三个网站正在向 LLOOGG.com 发送它们的访客浏览记录
然后 LLOOGG.com 会将这些浏览数据通过 WEB 页面实时地展示给用户,并存储起来最新的 5 到 10000 条浏览记录以便进行查阅,就是说用户可以设置想看最近的多少条。
这个就是 LLOOGG.com 的用户界面,ps:Google 的 Analytics知道 2011 年才有了实时功能,所以说 LLOOGG.com 的实时反馈想法在当时 2007 年还是很有新意的。
LLOOGG 的运作方式
各个网站发送的浏览记录会分别进入相应的队列
FIFO 机制,当列表的长度超过用户指定的最大长度时,程序每向列表推入一条记录,就需要从列表中弹出一条最旧的记录,图中展示比如用户设置列表最大长度为 5
LLOOGG 怎么引起负载问题的呢?
随着 LLOOGG 的用户越来越多,LLOOGG 要维护的列表数量也越来越多,要执行的推入和弹出操作也越来越多,当时 LLOOGG 当时使用 MYSQL 数据库,而每次 MYSQL执行推入和弹出操作都要进行硬盘写入和读取,程序的性能严重受制于硬盘 I/O,很多操作都堆在那里,然后网站整个就没法运作了。
这个负载问题的根本原因就是这个硬盘 IO,所以 antirez 在不改变硬件的基础上,通过提升列表操作的性能来解决负载问题,决定自己写一个具有列表结构的内存数据库原型。最重要的是数据存储在内存而不是硬盘,所以程序的性能不会受到硬盘 IO 限制,可以以极快的速度执行针对列表的堆入和弹出操作。结果试验,确实解决了 LLOOGG 当时
二、Redis特点
世界上有无数种数据库,为什么要使用 Redis 呢,我们来看看它的优点
2.1独特的键值对模型
我们知道很多数据库只能处理一种数据结构:
SQL数据库----二维表格
文档数据库(CouchDB、MongoDB)----由 JSON/BSON 组成的文档
2.2数据结构丰富
Redis 虽然也是键值对数据库,但是和 Memcached 不同的是,Redis 支持多种类型的数据结构,不仅可以是字符串,同时还提供散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)等数据结构。
通过选用不同的数据结构,用户可以使用 Redis 解决各式各样的问题。
数据库有两种,一种硬盘数据库,一种内存数据库
硬盘是把值储存在硬盘,典型的是 SQL 数据库
在内存里面就存储一下索引,当硬盘数据库想访问硬盘的值时,它先在内存里面找到索引,然后在找值,问题是什么,在读取和写入硬盘的时候,如果读写比较多的时候,它会把硬盘 IO 堵死。
至于内存数据库,它会直接把值放到内存里面,内存数据库就直接把值取到,风一样的感觉,读写数据的时候都不会受到硬盘 IO 速度的限制,所以速度极快。
2.3数据的持久化
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
2.4数据的备份
Redis支持数据的备份,即master-slave模式的数据备份。