您的位置:首页 > 数据库 > Redis

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

2018-12-13 20:35 435 查看

NoSQL的概念及特点

概念:not only sql 泛指非关系型数据库,为大数据而生
分类(按存储形式):

  1. 键值对存储型数据库
    采用key - value 的形式存储,简单,易部署
    例:redis,Cabinet/Tyrant,Oracle BDB
  2. 列存储数据库
    以列相关存储架构进行数据存储的数据库,主要适合于批量数据处理和即时查询。
    例:HBase,Riak
  3. 文档型数据库
    该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如 JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。
    例:MongoDB
  4. 图形(Graph)数据库
    —使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。
    例:Neo4J
    特点

redis

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

redis的特点和优势

  • 基于内存存储数据, 处理数据的速度快。
  • 基于key 和 value存储数据。
  • 有自己的key过期策略。
  • 数据类型丰富。
  • redis有自己特有的持久化机制。
  • 支持订阅/发布

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

  • 避免线程切换浪费时间
  • redis单个命令的响应时间为400纳秒
  • redis由c语言开发,贴合硬件

使用redis时存在的隐患
如果一个命令执行的时间过长,会导致命令队列阻塞, 引发redis某一时间段无法对外正常提供服务。
比如: 线上的环境, 避免使用 keys * 遍历key

redis的持久化

  • RDB持久化机制

当redis触发了RDB持久化机制的时候,处在进程中的数据会以快照文件的方式持久化到磁盘中,若redis服务异常关闭或重启,在redis服务启动的时候,根据持久化文件进行数据恢复
1. RDB触发时机
① 手动触发
使用 save 或 bgsave的命令,命令执行时,主进程会调用操作系统来fork一个子进程,此时,主进程继续执行命令队列的其他命令,子进程执行持久化操作,子进程执行完毕之后,会通知主进程
② 自动触发
第一种自动触发方式:当redis停止服务或重启服务时,自动触发RDB持久化
第二种自动触发方式:根据配置文件中的配置自动触发
2. RDB持久化的优缺点
优点

① RDB持久化文件经过了压缩算法的处理, 快照文件的大小 比 实际内存中的数据量要小。
② 采用RDB持久化文件恢复数据, 速度较快。
③ 我们可以将一个 .rdb快照文件,直接传递给另一个redis服务,完成数据的备份。
缺点
① 由于不同版本的redis生成的.rdb文件格式的差异, 会导致不同版本之间的rdb文件不通用。
② 无法实现秒级备份

  • AOF持久化机制

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

      AOF触发时机
      ① 当redis开启AOF持久化机制,redis服务关闭或重启时会自动触发AOF持久化机制
      ② 根据配置文件触发

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

      aof文件中会存在无效的命令
      对于过期数据的命令做优化
      对命令的组合进行优化

      触发AOF重写的时机:
      ① 手动触发 :命令 bgrewriteaof
      ② 自动触发 :

集群环境下的session管理方案

① session的复制
② session的粘滞
③ cookie保存会话信息
④ 使用redis管理session

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: