Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。


Redis 优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

1. NoSQL

NoSQL,中文称呼为非关系型数据库,它的全名Not only SQL。
NoSQL的出现并不是为了替代原有的关系型数据库,比如Oracle、SQLServer、MySQL、DB2等等,NoSQL的出现是为了解决高并发、高可用、高可扩展,大数据存储等一系列问题而产生的数据库解决方案,所以它并不能替代关系型数据库,只能作为关系型数据库的一个良好补充,NoSQL需要关系型数据库结合,才能发挥真正的价值和意义。

2. NoSQL分类

NoSQL目前分为4大类,分别是
(1).键值存储数据库 Redis
(2).列存储数据库 Hbase
(3).文档型数据库 芒果
(4).图形结构数据库 Neo4J

(1).键值存储数据库,主要是基于key-value的关系来保存,数据库中默认有一个哈希表,通过此表来完成一个特定的键指向一个特定的数据,key-value键值对模型优势在于简单易用,当需要大量数据处理的时候,优势非常明显,缺点在于如果仅仅只更新少量数据值的时候,效率有所下降。
常见的几种键值存储型NoSQL:Redis, Tokyo Tyrant, Voldemort, Oracle BDB。

(2).列存储数据库,通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak。

(3).文档型数据库,它同第一种键值存储相类似。但是此类数据库更多的时候存放内容都是半结构化的内容,比如存放JSON格式的数据。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDB. 国内也有文档型数据库SequoiaDB,目前已经开源。

(4).图形结构数据库,同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph.

3. Redis简介

REmote DIctionary Server(Redis)就是NoSQL中非常流行的一套非关系型数据库,它是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。由Salvatore Sanfilippo编写的key-value存储系统,redis的主要作用是在于构建高性能、可扩展的WEB应用服务,目前,Vmware在资助着redis项目的开发和维护。
Redis对于多种开发语言支持都非常完善,并提供多种语言的API,这也让它的热火度在全球领域都是只升不降的状态。
Redis中可以基于java常见的数据结构来完成对应的存储,所以在java领域应用非常广泛,Redis与其它键值数据存储相比,Redis有一组相对丰富的数据类型,可以基于string,map,list,set等类型来进行key-value存储。
Redis会将其数据库完全保存在内存中,仅使用磁盘进行持久化。Redis可以将数据复制到任意数量的从机中,进行分布式扩展。

4. Redis业务场景

在常见的业务场景中,最多使用redis的地方,就是系统服务缓存,比如查询数据,网页展示内容等。
另外一种常见使用的地方,就是分布式集群架构中的session分离。
其余会用到的地方,诸如IM(及时聊天工具)中的好友列表、系统服务中的任务列表、团购队列、抢票队列、下载排行、播放排行、热火度排行等等。
几乎在大型系统和海量数据的系统中,都有redis的身影。