1、redis简介
redis是一种使用C语言编写、开源、高性能、非关系型的Key-Value数据库。从这里可以看出redis是属于一种非关系型的Key-Value数据库。
2、什么是非关系型数据库?
看到非关系型数据库,我们自然联想到我们在大学中学到的关系型数据库。在这里简单的介绍一下关系型数据库,方便对比非关系型数据库。
关系型数据库指的是使用关系模型(二维表格模型)来组织数据的数据库。常见的关系型数据库管理系统有:MySql、Oracle、SQL Server等数据库。关系型数据库的优势是:①采用二维表结构非常贴近正常开发逻辑;②支持通用的SQL(结构化查询语言)语句;③丰富的完整性大大减少了数据冗余和数据不一致的问题,并且全部由表结构组成,文件格式一致;④可以用SQL句子多个表之间做非常繁杂的查询;⑤关系型数据库提供对事务的支持,能保证系统中事务的正确执行,同时提供事务的恢复、回滚、并发控制和死锁问题的解决;⑥数据存储在磁盘中,安全可靠。
通过以上对关系型数据库的介绍,关系型数据库有着较大的优势,那么为什么还要引进非关系型数据库呢?一个重要的原因是,随着互联网的发展,数据日益增多,关系型数据库面对海量的数据时会存在着很多的不足,比如无法满足高并发读写、高效率存储和访问等的需求。
非关系型数据库简称NOSQL数据库,指数据以对象的形式存储在数据库中,对象之间的关系通过每个对象自身的属性来决定,常用于存储非结构化的数据。
常见的NOSQL数据库:①键值数据库:Redis、Memcached、Riak②列族数据库:Bigtable、HBase、Cassandra③文档数据库:MongoDB、CouchDB、MarkLogic④图形数据库:Neo4j、InfoGrid。
非关系型数据库的优势:①非关系型数据库存储数据的格式可以是 key-value 形式、文档形式、图片形式等。使用灵活,应用场景广泛,而关系型数据库则只支持基础类型②速度快,效率高③海量数据的维护和处理非常轻松,成本低④非关系型数据库具有扩展简单、高并发、高稳定性、成本低廉的优势。⑤可以实现数据的分布式处理。
非关系型数据库的不足:①非关系型数据库暂时不提供SQL支持,学习和使用成本比较高②非关系数据库没有事务处理(ACID),无法保证数据的完整性和安全性③功能没有关系型数据库完善④复杂表关联查询不容易实现。
总结:关系型数据库与NOSQL数据库并非对立的关系而是互补的,在通常的情况下使用的是关系型数据库,在特定情况下比较适合使用NOSQL数据库,以此弥补关系型数据库的不足。
3、什么是Key-Value数据库?
顾名思义是一种以键值对存储数据的一种数据库,类似Java中的map、json等,每个键都会对应一个唯一的值,键和值都可以是从简单对象到复杂集合对象的任何内容。键值数据库是高度可分区的,并且允许以较大规模进行水平扩展。常用的键值数据库:Redis、Memcache等。
Memcache: ①很早出现的NOSQL数据库 。②数据都在内存中,一般不支持持久化(电脑关机后,内存中的数据就不存在了)。③支持简单的key-value模式,支持类型单一。④一般是作为缓存数据库辅助持久化的数据库(配合MySQL等数据库的使用)。
Redis:①几乎覆盖了Memcached的绝大部分功能。②数据都在内存中,支持持久化,主要用作备份恢复。③除了支持简单的key-value模式,还支持多种数据结构的存储,比如list、set、hash、zset等。④一般是作为缓存数据库辅助持久化的数据库(配合MySQL等数据库的使用)。
4、Redis的概述
(1)和Memcached类似,它支持存储的value类型相对较多,包括string、list、set、zset和hash。
(2)Redis的数据类型的支持push/pop,add/remove及取交集、并集和差集及更丰富的操作,而且这些操作但是原子性的。
(3)Redis支持各种不同方式的排序。
(4)Redis与memcached一样,为了保证效率,数据都是缓存在内存中。但是,Redis会周期性的把数据写入磁盘或者把修改操作写入追加的记录文件中。
(5)Redis在此基础上实现了master-slave(主从)同步。
5、Redis的应用场景
(1)配合关系型数据库做高速缓存:
①高频次,热门访问的数据,降低数据库IO。
②分布式框架,做session的共享。
(2)多样的数据结构存储持久化数据:
①最新的N个数据(通过List实现按自然时间排序的数据)。
②排行榜,Top N(利用zset有序集合)。
③时效性的数据,比如手机验证码(Expire过期)。
④计数器,秒杀(原子性,自增方法INCR、DECR)。
⑤去除大量数据中的重复数据(利用Set集合)。
⑥构建队列(利用List集合)。
⑦发布订阅消息系统(pub/sub模式)。