1.1 Redis快速入门
1.1.1 Redis简介
在当今的网络社会我们可以很方便地通过第三方平台(例如微博、百度等)访问和抓取数据。随着互联网Web 2.0网站的兴起,用户在社交网站上产生了海量的数据,使用传统的SQL数据库已经无法满足需求了。SQL数据库面对大规模和高并发的Web 2.0网站会暴露很多问题,NoSQL数据库却可以很好地处理用户的大量数据。我们先来了解什么是NoSQL数据库。
NoSQL(Not Only SQL),直译为“不仅仅是SQL”,是非关系型数据库存储的广义定义,是一种全新的数据库。NoSQL数据库以键值对(key-value)形式存储数据,和传统的关系型数据库不一样,不一定遵循传统的关系型数据库的一些基本要求,例如不遵循SQL标准、事务和表结构等。NoSQL数据库主要有以下特点:非关系型的、分布式的、开源的和水平可扩展的。
到目前为止,已经涌现出了很多NoSQL数据库产品,例如Redis、Memcached、MongoDB、Apache Cassandra、Apache CouchDB等。国内的新浪微博也已经在其产品线上广泛地使用Redis作为其NoSQL数据库。
远程字典服务(Remote Dictionary Server,Redis)是一个开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,它提供多种语言的API,包括Java、Python、PHP、C和C++等。Redis的特点是高性能,可以适应高并发的应用场景和持久化存储。因此,可以说Redis纯粹为应用而生,是一个高性能的key-value数据库。
Redis和另外一个非常流行的NoSQL数据库Memcached类似,但它支持存储的数据类型相对更多,包括字符串(String)、散列(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)。这些数据类型都支持push/pop、add/remove等命令,而且这些命令都是原子性(Atomic)的。此外,Redis还支持各种不同方式的排序。
Redis为了保证效率,把所有数据都保存在内存中,然后不定期地通过异步方式将数据保存到磁盘上(称为“半持久化模式”),也可以把每一次数据变化都写入Appendonly文件中(称为“全持久化模式”)。
Redis较新版本的安装包是Redis 6.0.6(截至2020年8月),可以从Redis官网下载,如图1-1所示。
图1-1 Redis官网
我们也可以访问Redis的中文官网,如图1-2所示。这个页面有个方便的工具—互动教程,单击链接会弹出一个新的页面,如图1-3所示。这是一个网页版的、交互式的Redis环境,可以在这个页面中输入常用的Redis命令,适合新手练习使用。
图1-2 Redis的中文官网
图1-3 Redis网页环境
1.1.2 Redis特性
Redis具有以下几个特性。
1.丰富的数据类型
Redis支持的5种基本数据类型如下。·String。
·Hash。
·List。
·Set。
·Sorted Set。
这5种基本数据类型功能强大,在第2章会进行详细的介绍。
2.内存存储与持久化
Redis把所有数据都存储在内存中。因为基于内存的读写速度快于硬盘,所以Redis在性能上比其他基于硬盘存储的数据库有更大的优势。
将数据存储在内存中也会出现问题,例如程序退出后内存中的数据会永久丢失。为此Redis提供对内存中数据的持久化支持,可以将内存中的数据异步写入硬盘中。
3.可用于缓存
Redis中的消息可以通过key设置过期时间(Set Expire),过期后自动删除key。Redis使用SETEX命令来设置过期时间,按过期时间自动删除key。
4.功能丰富
Redis作为数据库,提供了丰富的功能,可以将它用作缓存、队列系统等。
Redis可以为每个key设置过期时间,过期时间到期后key会自动被删除。这一功能配合Redis出色的性能让Redis可以作为缓存系统来使用,而且由于Redis支持持久化方式RDB(它是Redis Database的缩写,原理是Redis在指定的时间间隔将内存中的数据库数据集快照写入磁盘)和AOF(它是Append Only File的缩写,原理是将Redis的操作日志以追加的方式写入文件),因此Redis成了另一个非常流行的缓存系统Memcached的有力竞争者。
Redis实现了Master/Slave这种主从同步的形式。Redis还支持订阅模式,可以用来开发聊天室。