NoSQL和redis简介以及redis的两种持久化机制

NoSQL的概念及特点

概念:not only sql 泛指非关系型数据库,为大数据而生

分类(按存储形式):

1.键值对存储型数据库

采用key - value 的形式存储,简单,易部署

例:redis,Cabinet/Tyrant,Oracle BDB

2.列存储数据库

以列相关存储架构进行数据存储的数据库,主要适合于批量数据处理和即时查询。

例:HBase,Riak

3.文档型数据库

该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如 JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。

例:MongoDB

4.图形(Graph)数据库

使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。

例:Neo4J

特点:

NoSQL和redis简介以及redis的两种持久化机制_第1张图片

redis

简介

redis是一个key-value存储系统。支持的数据类型有string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。redis基于内存存储,提供持久化操作

redis的特点和优势:

1 基于内存存储数据, 处理数据的速度快。

2 基于key 和 value存储数据。

3 有自己的key过期策略。

4 数据类型丰富。

5 redis有自己特有的持久化机制。

6 支持订阅/发布

为什么单线程的redis速度如此之快?

避免线程切换浪费时间

redis单个命令的响应时间为400纳秒

redis由c语言开发,贴合硬件

使用redis时存在的隐患

如果一个命令执行的时间过长,会导致命令队列阻塞, 引发redis某一时间段无法对外正常提供服务。

比如: 线上的环境, 避免使用 **keys *** 遍历key

redis的持久化

RDB持久化机制

当redis出发了RDB持久化机制的时候,处在进程中的数据会以快照文件的方式持久化到磁盘中,若redis服务异常关闭或重启时,在redis服务启动的时候,根据持久化文件进行数据恢复

RDB触发时机

① 手动触发

使用 save 或 bgsave的命令,命令执行时,主进程会调用操作系统fork一个子进程,此时,主进程继续执行命令队列的其他命令,子进程执行持久化操作,子进程执行完毕之后,会通知主进程

② 自动触发

第一种自动触发方式:当redis停止服务或重启服务时,自动触发RDB持久化

第二种自动触发方式:根据配置文件中的配置自动触发

RDB持久化的优缺点

优点

① RDB持久化文件经过了压缩算法的处理, 快照文件的大小 比 实际内存中的数据量要小。

② 采用RDB持久化文件恢复数据, 速度较快。

③ 我们可以将一个 .rdb快照文件,直接传递给另一个redis服务,完成数据的备份。

4.2 缺点

① 由于不同版本的redis生成的.rdb文件格式的差异, 会导致不同版本之间的rdb文件不通用。

② 无法实现秒级备份

AOF持久化机制

AOF持久化是通过生成命令日志文件的方式,完成持久化操作的。当服务重启的时候redis会将命令日志文件中保存的命令,再执行一次,完成数据的恢复。(AOF机制默认是关闭的)

AOF触发时机

① 当redis开启AOF持久化机制,redis服务关闭或重启时会自动触发AOF持久化机制

② 根据配置文件触发

AOF重写

AOF重写的目的: 对appendonly.aof文件进行优化。优化后的AOF文件体积会变小。

为什么AOF重写后文件会变小?

① aof文件中会存在无效的命令

② 对于过期数据的命令做优化

③ 对命令的组合进行优化

触发AOF重写的时机:

① 手动触发 :命令 bgrewriteaof

② 自动触发 :

NoSQL和redis简介以及redis的两种持久化机制_第2张图片

 在此我向大家推荐一个架构学习交流群。交流学习群号:938837867 暗号:555 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备

你可能感兴趣的:(NoSQL和redis简介以及redis的两种持久化机制)