NoSQL介绍
NoSQL(Not Only SQL),意思是 "不仅仅是SQL",泛指非关系型数据库,区别于RDBMS关系型数据库,但是在实际应用场景中却和关系型数据库相辅相成。
NoSQL这个技术门类,早期就有人提出,但是早期由于对软件的性能没有那么高的要求,所以早期一般都只使用RDBMS应对数据存储。互联网发展至2009年,随着并发越来越高,用户数据越来越多,NoSQL发展的趋势才愈发高涨。
随着互联网网站的兴起,RDBMS在应对动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题,如商城网站中对商品数据频繁查询、对热搜商品的排行统计、订单超时问题、以及微信朋友圈(音频,视频)存储等。这样的问题使用RDBMS实现就显得非常复杂,即使能够实现在性能上也不是那么乐观。NoSQL这个技术门类的出现,更好的解决了这些问题,它告诉了世界不仅仅是SQL,因为SQL主要是RDBMS中使用的,如今有一些业务也需要不使用SQL的NoSQL来实现了。
三大类NoSQL
1. Key-Value数据库
说明:
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。
特点:
- 优点:简单,易部署。
- 缺点:对数据库中的部分数据进行更新的效率非常低下。(需要遍历)
相关产品:
- Redis:Key-Value数据存储在内存。
- SSDB:Key-Value数据存储在硬盘(号称性能不亚于Redis)。
2. 列存储数据库
说明:
这一类数据库主要用来应对分布式存储的海量数据。
特点:
Key仍然存在,但是它们的特点是指向了多个列,这些列是由列家族来安排的。
相关产品:HBase
3. Document数据库
说明:
文档型数据库的灵感是来自于Lotus Notes 办公软件,它与Key-Value数据库相类似,该数据库存储的数据是版本化的文档。半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是Key-Value数据库的升级版,因为Key-Value之间允许嵌套,并且文档型数据库比Key-Value数据库的查询效率更高。
特点:
以文档(Document)形式存储。使用文档型数据库可以大大节省设计库表的时间,因为JSON数据在开发的过程中可以动态扩展字段。但是文档型数据库目前对事务的支持还没有RDBMS那么好,但是势头非常猛。
相关产品:MongoDB
NoSQL应用场景
- 数据模型较为简单
- 系统设计较为灵活
- 数据库性能要求比较高
- 不需要高度数据一致性(数据出现小范围误差对于业务影响不大)
Redis介绍
Redis是一个开源(BSD许可)的内存型数据库,用作数据库、缓存和消息中间件。
Redis所有的数据都存储在内存中,这也就是Redis数据读写之快的原因。同时也有弊端,比如说内存一断电就会丢失所有未保存的数据,所以Redis也提供了相应的持久化方案,定期将内存中的数据存入硬盘中。
Redis特点
-
高性能Key-Value内存型数据库
-
丰富的数据类型
-
支持数据持久化
-
设计时单进程,单线程,串行执行(不支持并发,没有线程安全问题,从而实现分布式锁)
分布式锁:在应用只部署在一台服务器上,只有一套Java运行环境,一个JVM,因此可以使用Synchronized关键字来实现线程锁保证数据一致性;在集群中,有多套运行环境,多个JVM同时运行服务,这时Synchronized就不能起到作用了,因为Synchronized只能控制当前JVM,而集群是跨JVM的,Synchronized不能控制多台JVM多线程操作数据。如果想要在集群中实现分布式锁保证数据一致性,只能找独立于所有JVM的产品去解决,Redis是其中之一。
Redis启动
redis-server有两种启动方式,默认启动和加载配置文件启动。
如果不指定配置文件启动,那么就是默认启动,使用的是redis-server这个shell脚本中的配置。
在不同平台和不同版本的Redis中,有的不会给配置文件,有的配置文件需要从源码目录中拷贝到执行目录。因此加载配置文件启动的具体方式,不同版本,不同平台(Windows,Linux,Docker)可能都不太一样,具体网上查看即可。
因为Redis对中文做了编码,所以如果Key的内容是中文,那么查看的时候查看到的是Redis的编码,而不是中文内容。如果想要查看中文内容,那么在启动redis-cli时需要添加参数
./redis-cli -p 端口 --raw
Redis库
Redis中的库类似于MySQL中Database的概念,存放数据的基本单元,不同应用使用不同库。
一个库可以存放多对Key-Value。
每一个库都有一个唯一编号(index),从0开始。
默认库的个数为16,编号0 ~ 15。(编号永远都是:0 ~(库数 - 1))
默认使用0号库。
库与库之间是相互隔离的,意味着每一个库中都可以有相同的Key。
Redis可视化工具
Redis可视化工具很多,具体安装教程请网上搜索。
可视化工具安装完如果连接不上Redis,原因有两点:
- Redis没有开启远程连接。
- 没有关闭防火墙。