1、什么是NoSQL数据库
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,具有非常高的读写性能,尤其是超大规模数据的存储。
(1)NoSQL数据库的类型分类
- KV键值对方式存储,如:redis、memcache等
- 文档型数据库(bson格式比较多),如:MongoDB、CouchDB
- 列存储数据库,如:Cassandra, HBase等
- 图关系数据库,如:Neo4J, InfoGrid
(2)数据的存储特征(CAP)
- Consistency(强一致性)
- Availability(可用性)
- Partition tolerance(分区容错性)
CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以
分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。CA传统Oracle数据库满足的特征,AP 大多数网站架构的选择, CP为Redis、Mongodb满足的要求;
2、什么是Redis数据库
是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器;
(1)特点
- 数据持久化:Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用;
- 存储结构:Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储;
- 备份方式:Redis支持数据的备份,即master-slave模式(主从复制)的数据备份;
(2)作用
- 用于数据缓存、持久化;
- 模拟类似于HttpSession这种需要设定过期时间的功能;
- 发布、订阅消息系统;
- 定时器、计数器;
(3)Redis数据类型
- String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M;
- List(列表)
是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。它的底层实际是个链表;
性能方面注意:
它是一个字符串链表,left、right都可以插入添加;如果键不存在,创建新的链表;如果键已存在,新增内容;如果值全移除,对应的键也就消失了。链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。
- Hash(哈希,键值对存储方式Map)
是一个键值对集合。Redis的hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Map<String,Object>
- Set(无序集合)
是string类型的无序集合。它是通过HashTable实现实现的
- Zset(有序集合)
和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。