Redis是目前最为流行的一个Key-Value内存数据库(Key-Value In-Memory Database)。它不仅能用作数据库管理数据,而且还常常用于缓存(Caching)或者消息转发(Message Broker)等场景。Redis取自于它的全名REmote DIctionary Server。
Redis是一个小巧的数据库,它由C语言实现,总共约2万行代码。Redis支持多种数据类型,例如,字符串(String)、链表(List)、集合(Set)、哈希表(Hash Table)等。在Redis中,因为所有的数据都存放在内存中,所以,Redis还支持可选的数据持久化功能。当数据持久化功能开启时,数据库重启不会丢失数据。Redis可运行于单节点环境或者分布式集群环境;在分布式环境下,数据能在不同节点之间同步和备份。Redis具有小巧、性能好、扩展性好等优点,因此,它是目前最为流行的一种Key-Value数据库。至今,Redis已更新至5.0.8版本。读者可在Redis的官方网站上获得更多信息和源代码。
因为Redis是一种NoSQL数据库;它的工作方式和特点与传统的关系型数据库(Relational Database)不同。因此,本章首先从理论的角度比较关系型数据库与NoSQL数据库,分析其优缺点。然后,再解释并总结Redis数据库的特性,为正式进入Redis的内容打下理论基础。
关系型数据库是一种最为通用的数据库类型。它建立于关系模型(Relational Model)之上。具体地讲,它使用表(Table)或者视图(View)来表达数据之间的关系。在关系型数据库中,开发人员可以使用SQL (Structured Query Language) 编程语言来创建、删除、或者查询数据。
关系型数据库的应用场景非常广。在数据关系确定之后,开发人员能够根据数据之间的关系创建表和视图来存储和表达数据。然而,随着互联网的发展和数据大规模地快速增长,关系型数据库面临了诸多挑战。以下两个问题启发了人们开发新类型的数据库。
人们在关系型数据库并行化方向付出了诸多努力,然而,在许多场景下收获不多。因此,人们逐渐意识到,数据库不应该是一个大而全的系统。未来的数据库系统应该是精准定位于某一特定场景的系统。如果读者对数据库未来发展感兴趣的话,可以阅读下面这两篇文章。这两个文章的作者是2015年图灵奖获得者迈克尔·斯通布雷克(Michael Stonebraker)。他在文章中的观点是:单纯使用关系型数据库来管理现代数据的时代已结束。未来将会出现各种各样的数据库来处理某一特定场景。
NoSQL数据库是另一种数据库类型。起初,NoSQL的意思是"No SQL System",即不使用SQL语言的数据库。而如今,NoSQL数据库阵营逐渐发展壮大,NoSQL的意义也变为了"Not Only SQL"。
从本质上讲,NoSQL是指不使用关系型模型构建数据库。目前,NoSQL数据库可分为四类,它们是:Key-Value数据库(例如:Redis,AWS DynamoDB);文档数据库(Document-Oriented Database,例如:MongoDB,AWS DocumentDB);图数据库(Graph Database,例如:Neo4j,AWS Neptune);和Wide Column数据库(例如:Apache Cassandra)。当然,也有些数据库集多种数据模型于一身,例如ArangoDB支持Key-Value模型,文档模型,和图模型。在下面的内容中,我们着重讲解Key-Value数据库。
从理论上看,Key-Value数据库并不是一个新的概念。它与关联数组(Associative Array),哈希表(Hash Table),或者字典(Dictionary)的概念非常类似。Key-Value数据库管理着一组Key/Value对;Key和Value可以是任意结构的数据。除了添加和删除Key-Value数据以外,Key-Value数据库最核心的功能是提供快速使用Key对象来查询Value对象的查询功能。
图一 Key-Value数据库。
Key-Value数据库一般使用下述的两个步骤建立从Key到Value的映射。在实际应用中,这个映射逻辑常常体现在从Key到Value的查询过程或者索引的建立过程中。图二展示了从Key映射到Value的过程。
图二 从Key到Value的映射。
Key-Value数据库的特点是从Key到Value的查询速度非常快;Key-Value数据库能容纳超大规模的数据。但是,Key-Value数据库的缺点也同样非常明显。我们将其缺点总结如下。
SELECT name
FROM Product
WHERE price > 80.00
;
SELECT name
FROM Product
WHERE description like '%Book%'
;
SELECT name
FROM Product
WHERE character_length(description) > 100
;
在理解了Key-Value数据库之后,理解Redis就不那么困难了。我们将Redis的特性特点总结如下。
本章主要介绍Redis系统的基本内容。因为Redis是一个Key-Value数据库,它的工作方式与关系型数据库有许多不同之处。因此,本文还比较了这两种数据库的特点。Key-Value数据库(或者Redis)不能解决所有问题,但是,它能够很好的解决某一些具体问题。
我们将在接下来的章节中逐个介绍Redis各个部分的功能,后续章节安排如下。
注册用户登陆后可留言