Redis 常用知识

Redis 介绍

  • Redis 一个开源的使用ANSI C语言编写、遵守BSD协议,内存中的数据结构存储系统,它可以用作Key-Value数据库、缓存和消息中间件,并提供多种语API。
    支持多种数据结构,如 字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)与范围查询,bitmaps,hyperloglogs 和 地理空间(geospatial)索引半径查询。Redis内置了复制(replication),LUA脚本(Lua scripting),LRU驱动事件(LRU eviction),事务(transactions)和不同级别的 磁盘持久(persistence),并通过Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)。

NOSQL对比

RDB&AOF持久化

全量模式持久化(RDB)
  • 当发生写操作时,Redis会有状态的切换,将Redis的数据持久化到硬盘中,形成快照。Redis重启时,加载最近的一份快照数据,将Redis恢复到最近一次的持久化状态上。
  • 写入流程包含save和bgsave两种方式
  1. save可以由客户端显示触发的,也可以在redis shutdown 时触发。Save本身是单线程串行化的方式执行的,因此当数据量大时,有肯能会发生Redis Server的长时间卡顿。但是其备份期间不会有其他命令执行,因此备份在这一时刻是一致性的。
  2. bgsave也可以由客户端显示触发、可以通过配置定时任务触发也可以在master-slave的分布式结构下由slave节点触发。bgsave命令在执行的时候,会fork一个子进程。子进程提交完成之后,会立即给客户端返回响应,备份操作在后台异步执行,在此期间不会影响Redis的正常响应。

    save和bgsve
  • save和bgsave的区别
  1. 对于bgsave来说,当父进程Fork完子进程之后,异步任务会将当前的内存状态作为一个版本进行复制。在复制过程中产生的变更,不会反映在这次备份当中。在Redis的默认配置当中,当满足下面任一条件时,会自动触发bgsave 的执行。
  2. bgsave相对于save来说,其优势是异步执行,不影响后续的命令执行。但是Fork子进程时,涉及父进程的内存复制,此时会增加服务器的内存开销。当内存开销高到使用虚拟内存时,bgsave的Fork子进程会阻塞运行,可能会造成秒级的不可用。因此使用bgsave需要保证服务器空闲内存足够。
  • 恢复数据
  1. 当Redis重新启动时,会从本地磁盘加载之前持久化的文件。当恢复完成之后,再受理后续的请求操作。
增量模式持久化(AOF)
  • 与RDB记录状态不同,AOF(append-only-file)则是每条写命令的记录,通过记录所有写命令的执行,最后恢复出最终的数据状态。
  • 写入流程
  1. always:每一次的刷新缓冲区,都会同步触发同步操作。因为每次的写操作都会触发同步,所以该策略会降低Redis的吞吐量,但是这种模式会拥有最高的容错能力。
  2. every second:每秒异步的触发同步操作,这种是Redis的默认配置。
  3. no:由操作系统决定何时同步,这种方式Redis无法决定何时落地,因此不可控。

    aof
  • AOF模式优化
  1. 随着Redis 持续的运行,会有大量的增量数据append 到AOF 文件中。为了减小硬盘存储和加快恢复速度,Redis 通过rewrite 机制合并历史AOF 记录。流程如下:

    1.1 历史AOF:以快照的方式保存。

    1.2 快照写入期间的增量:待快照写入完成之后append 到快照文件中。

    1.3 后续的增量:写入新的AOF。
  • 恢复数据
  1. AOF的恢复时机也是在机器启动时,一旦存在AOF,Redis会选择增量恢复。因为增量的持久化持续的写入磁盘,相比全量持久化,数据更加完整。恢复的过程就是将AOF中存放的命令,重新执行一遍。完成之后再继续接受客户端的新命令。

Redis Master&Slave(主从)

Redis Sentinel(哨兵模式)

Redis Cluster(集群部署)

猜你喜欢

转载自www.cnblogs.com/lenovo_tiger_love/p/10799844.html