Redis 是完全开源的,遵守 BSD 协议,是一个高性能(NoSQL)的 Key-Value 数据库。
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
redis官网
作者
Redis 的作者,叫Salvatore Sanfilippo,来自意大利的西西里岛,居住在卡塔尼亚。目前供职于Pivotal公司。他使用的网名是antirez。
NoSQL数据库的产生就是为了解决大规模数据集合和多重数据种类带来的挑战,尤其是大数据应用的难题。即解决海量数据下的数据库性能和扩展能力。最大的特点在于要求的数据量大,对事物的要求低。
键值数据库就像在传统语言中使用的哈希表。你可以通过key来添加、查询或者删除数据,鉴于使用主键访问,所以会获得不错的性能及扩展性。
如:Redis(常见)、Memcached、Amazon’s Dynamo、Project Voldemort
有谁在使用:GitHub (Riak)、Twitter (Redis和Memcached)、StackOverFlow (Redis)、 Instagram (Redis)、Youtube (Memcached)、Wikipedia(Memcached)
适用场景:储存用户信息,比如会话、配置文件、参数、购物车等等。这些信息一般都和ID(键)挂钩,这种情景下键值数据库是个很好的选择。
不适用的场景:
取代通过键查询,而是通过值来查询。Key-Value数据库中根本没有通过值查询的途径。
需要储存数据之间的关系。在Key-Value数据库中不能通过两个或以上的键来关联数据。
事务的支持。在Key-Value数据库中故障产生时不可以进行回滚。
面向文档数据库的灵感是来自于Lotus Notes办公软件的,而且它同键值存储相类似。
面向文档数据库会将数据以文档的形式储存。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。
如:MongoDB(常见)、CouchDB、RavenDB. 国内也有文档型数据库SequoiaDB,已经开源。
有谁在使用:SAP (MongoDB)、Codecademy (MongoDB)、Foursquare (MongoDB)、NBC News (RavenDB)
适用的场景
日志。企业环境下,每个应用程序都有不同的日志信息。Document-Oriented数据库并没有固定的模式,所以我们可以使用它储存不同的信息。
分析。鉴于它的弱模式结构,不改变模式下就可以储存不同的度量方法及添加新的度量。
不适用的场景
在不同的文档上添加事务。Document-Oriented数据库并不支持文档间的事务,如果对这方面有需求则不应该选用这个解决方案。
列存储数据库将数据储存在列族(column family)中,一个列族存储经常被一起查询的相关数据。该数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。举个例子,如果我们有一个Person类,我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。
如:Cassandra、HBase(常见)、Riak、
有谁在使用:Ebay (Cassandra)、Instagram (Cassandra)、NASA (Cassandra)、Twitter (Cassandra and HBase)、Facebook (HBase)、Yahoo!(HBase)、BestBuy (Riak)
适用的场景
日志。因为我们可以将数据储存在不同的列中,每个应用程序可以将信息写入自己的列族中。
博客平台。我们储存每个信息到不同的列族中。举个例子,标签可以储存在一个,类别可以在一个,而文章则在另一个。
不适用场景
如果我们需要ACID事务。Vassandra就不支持事务。
原型设计。如果我们分析Cassandra的数据结构,我们就会发现结构是基于我们期望的数据查询方式而定。在模型设计之初,我们根本不可能去预测它的查询方式,而一旦查询方式改变,我们就必须重新设计列族。
图形数据库允许我们将数据以图的方式储存。实体会被作为顶点,而实体之间的关系则会被作为边。比如我们有三个实体,Steve Jobs、Apple和Next,则会有两个“Founded by”的边将Apple和Next连接到Steve Jobs。
如:Neo4J(常见)、Infinite Graph、OrientDB
有谁在使用:Adobe (Neo4J)、Cisco (Neo4J)、T-Mobile (Neo4J)
适用的场景
在一些关系性强的数据中
推荐引擎。如果我们将数据以图的形式表现,那么将会非常有益于推荐的制定
不适用场景
不适合的数据模型。图数据库的适用范围很小,因为很少有操作涉及到整个图。
关系型数据库需要对表与表之间建立关联关系
更多资料可百度,这里主要说的是非关系数据库。
1.底层采用 C语言编写;基于内存存储。
2.因为数据存储在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是0(1)
3.Redis本质上是一个Key—Value类型的内存数据库,很像Memcached ,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。fork子进程持久化。
4.因为是纯内存操作,Redis的性能非常出色, 每秒可以处理超过10万次读写操作,是已知性能最快的Key-Value 数据库。
1.支持的类型:String,List,Set,Szet,Hash。
2.Redis 的出色之处不仅仅是性能,Redis 最大的魅力是支持保存多种数据结构,此外单个 Value 的最大限制是1GB,不像 Memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能
Redis支持事务,所有的操作都是原子性。
意思就是要么全部执行成功要么执行失败完全不执行。
事务
支持多个 DB
计数
订阅发布 Pub / Sub 功能
key过期策略。如:按key设置过期时间,过期后将会自动删除
。。。等特征
Redis 提供 RDB 和 AOF 两种数据的持久化存储方案,解决内存数据库最担心的是万一 Redis 挂掉,数据会消失掉。
Redis 是一个简单的,高效的,分布式的,基于内存缓存的工具,架设好服务器后,通过网络链接(类似数据库),提供Key-Value 式缓存服务。
简单, 是Redis 的突出特色。
简单可以保证核心功能的稳定和优异。
1.Redis 是一个单 key 存入 512M 大小
2.Redis 支持多种类型的数据结构(String,List,Hash,Set , ZSet)
3.Redis 是单线程 原子性
4.Redis 可以持久化,因为使用了 RDB 和 AOF 机制
5.Redis 支持集群, Redis支持 库 0-15 个库
6.Redis 还可以做消息队列 比如聊天室 MI
7.企业级开发中: 可以做数据库、缓存(热点数据(经常需要被查询,但是不经常被修改或者删除的数据)和消息中间件等大部分共恩感)
8. 优点:
丰富的数据结构 高速读写, Redis 使用自己实现的分离器,代码量很短,没有使用 lock (MySQL)因此效率非常高。
9.缺点:
持久化, Redis 直接将数据存储到内存中,要将数据保存到磁盘上,Redis
可以使用两种方式实现持久化过程,定时快照(snapshot);每间隔一段时间将整个数据库写到磁盘上,每次均是全部数据,代价非常高,第二种方式基于语句追加(AOF)只追踪变化的数据,但是追加的log可能过大,同时所有的操作均重新执行一遍,回复速度慢。 消耗内存,占用内存过高