Redis - NoSQL

  • SQL 与 NoSQL
  • 差别一:结构化 与 非结构化
  • 差别二:关联性 与 非关联性
  • 差别三:规范化查询语句 与 非规范化
  • 差别四:事务 与 无事务
  • 差别五:磁盘存储 与 内存存储
  • Redis
  • Redis 的安装


当前数据库存储主要分为 关系型数据库(SQL) 以及 非关系型数据库(NoSQL)
MySQL 作为典型的 关系型数据库;而 Redis 作为典型的 非关系型数据库


SQL 与 NoSQL

差别一:结构化 与 非结构化

结构化:

在建立 SQL数据库时,我们需要对数据的类型与数据的大小做定义,我们需要设置主键、非空等约束。最终给我们呈现的是一张具有规则的表格。

非结构化数据库是NoSQL数据库 非结构化数据库设计_sql

非结构化:

在 Redis、MongoDB、Neo4j 等非结构化数据库中,数据不以表等形式存储,而是以:
Redis:键值对;
MongoDB:json存储,文档类型;
Neo4j:图类型;

非结构化数据库是NoSQL数据库 非结构化数据库设计_sql_02


差别二:关联性 与 非关联性

关联性:

SQL中表与表之间存在关联,通过外键的方式建立;

非关联性:

NoSQL中不存在关联性,而是通过 json嵌套的方式;


差别三:规范化查询语句 与 非规范化

规范化:

SQL中存在一套非常规范的查询语句:

# 查询语句示例
select id,name,age from tb_user where id=1;
# DQL实际执行顺序
FROM
	表名
WHERE
	条件
GROUP BY
	分组
HAVING
	分组后条件
SELECT
	字段
ORDER BY
	排序
LIMIT
	分页

非规范化:

NoSQL中:

# Redis
get user:1

# MongoDB
db.users.find({_id:1})

# elasticsearch
GET http://localhost:9200/users/1

差别四:事务 与 无事务

事务:

SQL中,通过事务控制命令对事务进行控制;控制的原因主要为了保证数据的完整性以及数据的一致性。即ACID特性:

原子性:(Atomicity)
事务是不可分割的最小操作单元,要么全部成功,要么全部失败;

一致性:(Consistency)
事务完成时,必须是所有数据保持一致状态;

隔离性:(Isolation)
多组事务存在并发,但是根据数据库系统提供的隔离机制,互不干扰;

持久性:(Durability)
事务一旦提交或回滚,其对数据库中数据的更改是持久性的。
start transaction;		# 控制事务命令
# 被控制的事务
...
commit;					# 正确即提交
rollback;				# 错误即回滚

无事务:

NoSQL中,不存在事务管理的说法,故无法满足 ACID (原子性、一致性、隔离性、持久性);所以说,若对数据库安全性有需求,则应该首选关系型数据库。


差别五:磁盘存储 与 内存存储

磁盘存储:

SQL中,大多数采用磁盘存储,所以对比 NoSQL的内存存储,肯定性能不如其;但是满足ACID的要求;

内存存储:

NoSQL中,大多数数据存储在内存中,如此性能比较高,但是内存会因为突然关机而数据消失,所以比如 Redis,会定期从内存中存入磁盘,以此支持数据持久化。


Redis

诞生于2009年,全称 Remote Dictionary Server,是基于内存的键值型NoSQL数据库。

特征:

  1. 键值型;
  2. 单线程,串行执行,原子性,安全;
  3. 低延迟,速度快,基于内存;
  4. 支持数据持久化(定期从内存存入磁盘)
  5. 支持主从集群,分片集群;
  6. 支持多语言客户端。

Redis 的安装