Redis - NoSQL
- SQL 与 NoSQL
- 差别一:结构化 与 非结构化
- 差别二:关联性 与 非关联性
- 差别三:规范化查询语句 与 非规范化
- 差别四:事务 与 无事务
- 差别五:磁盘存储 与 内存存储
- Redis
- Redis 的安装
当前数据库存储主要分为 关系型数据库(SQL) 以及 非关系型数据库(NoSQL);
MySQL 作为典型的 关系型数据库;而 Redis 作为典型的 非关系型数据库。
SQL 与 NoSQL
差别一:结构化 与 非结构化
结构化:
在建立 SQL数据库时,我们需要对数据的类型与数据的大小做定义,我们需要设置主键、非空等约束。最终给我们呈现的是一张具有规则的表格。
非结构化:
在 Redis、MongoDB、Neo4j 等非结构化数据库中,数据不以表等形式存储,而是以:
Redis:键值对;
MongoDB:json存储,文档类型;
Neo4j:图类型;
差别二:关联性 与 非关联性
关联性:
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数据库。
特征:
- 键值型;
- 单线程,串行执行,原子性,安全;
- 低延迟,速度快,基于内存;
- 支持数据持久化(定期从内存存入磁盘)
- 支持主从集群,分片集群;
- 支持多语言客户端。
Redis 的安装
未完待续 2023年3月10日晚间完成