1、Units单位

  1. 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit
  2. 对大小写不敏感

2、INCLUDES包含

  • 和我们的Struts2配置文件类似,可以通过includes包含,redis.conf可以作为总闸,包含其他

3、GENERAL通用

  • daemonizepidfileport : 参考文章末尾的通用配置。
  • tcp-backlog:
    • 设置tcp的backlog,backlog其实是一个连接队列,backlog队列总和=未完成三次握手队列 + 已经完成三次握手队列。
    • 在高并发环境下你需要一个高backlog值来避免慢客户端连接问题。注意Linux内核会将这个值减小到/proc/sys/net/core/somaxconn的值,所以需要确认增大somaxconn和tcp_max_syn_backlog两个值来达到想要的效果
  • tcp-keepalive: 位为秒,如果设置为0,则不会进行Keepalive检测,建议设置成60
  • loglevellogfile: 参考文章末尾的通用配置。
  • syslog-enabled: 是否把日志输出到syslog中
  • syslog-ident: 指定syslog里的日志标志
  • syslog-facility: 指定syslog设备,值可以是USER或LOCAL0-LOCAL7
  • databases : 参考文章末尾的通用配置。

4、SNAPSHOTTING快照

  • 该配置主要用于 redis 的 RDB 持久化


  • save

    • RDB是整个内存的压缩过的Snapshot,RDB的数据结构,可以配置复合的快照触发条件,默认是

      • 1分钟内改了1万次,
      • 或5分钟内改了10次,
      • 或15分钟内改了1次。
    • 如果想禁用RDB持久化的策略,只要不设置任何save指令,或者给save传入一个空字符串参数也可以

  • stop-writes-on-bgsave-error

    • 如果配置成no,表示你不在乎数据不一致或者有其他的手段发现和控制

  • rdbcompression

    • 对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能

  • rdbchecksum

    • 在存储快照后,还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能
  • dbfilename
    • 指定持久化本地数据库文件名,默认值为dump.rdb
  • dir
    • 指定持久化本地数据库文件存放路径, 默认为当前启动的 dir ./

5、RDB (Redis DataBase)

  • RDB 是什么

    • 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里
    • Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到
      一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。
    • 整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。
  • Fork
    • Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程
  • RDB 保存的是dump.rdb文件

  • 如何触发RDB快照
    • 使用上述的配置示例:
    • 命令save或者是bgsave
      • Save:save时只管保存,其它不管,全部阻塞
      • BGSAVE:Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。可以通过 lastsave 命令获取最后一次成功执行快照的时间
    • 执行flushall命令,也会产生dump.rdb文件,但里面是空的,无意义
  • 如何恢复
    • 将备份文件 (dump.rdb) 移动到 redis 启动服务的文件夹下即可
    • CONFIG GET dir 获取目录
  • RDB 的优势 和 劣势
    • 优势

      • 适合大规模的数据恢复
      • 对数据完整性和一致性要求不高
    • 劣势
      • 在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改
      • Fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑
  • 如何停止
    • 动态所有停止RDB保存规则的方法:redis-cli config set save ""
  • 示例:

  • 总结


6、主从复制 REPLICATION

  • 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主
  • 主从复制有什么好处:
    • 读写分离
    • 容灾恢复
  • 主从复制配置规则:
    • 1、主库不配从库配
    • 2、从库配置:slaveof 主库IP 主库端口
      • 每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件
    • 3、修改配置文件细节操作(用来模拟生产环境)
      • 拷贝多个redis.conf文件
      • 开启daemonize yes
      • Pid文件名字
      • 指定端口
      • Log文件名字
      • Dump.rdb名字
  • 示例

  • 复制多份配置文件

  • 如果没有在配置文件中写死主从配置, 需要在从机客户端启动的时候指定

  • 开启守护进程运行

  • 修改不同的端口


  • 修改 pidfile

  • 修改log 文件

  • 修改dump.rdb 的名称

  • 测试:

  • 常用3招
    • 一主二仆

      • 一个Master两个Slave
    • 薪火相传(形成链状)
      • 上一个Slave可以是下一个slave的Master,Slave同样可以接收其他 slaves 的连接和同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master的写压力
      • 中途变更转向:会清除之前的数据,重新建立拷贝最新的
      • Slaveof 新主库IP 新主库端口
    • 反客为主
      • SLAVEOF no one: 使当前数据库停止与其他数据库的同步,转成主数据库
  • 复制原理
    • Slave启动成功连接到master后会发送一个sync命令
    • Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
    • 全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
    • 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
    • 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
  • 哨兵模式(sentinel)
    • 哨兵模式是什么: 反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
    • 怎么使用:
      • 调整结构,6379带着80、81
      • /usr/common目录下新建sentinel.conf文件,名字绝不能错
      • 配置哨兵,填写内容:
        • sentinel monitor 被监控数据库名字(自己起名字) 127.0.0.1 6379 1
        • 上面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多少后成为主机
      • 启动哨兵模式
        • Redis-sentinel /usr/common/sentinel.conf
      • 问题:如果之前的master重启回来,会不会双master冲突?
        • 不会,会变成从机
      • 一组sentinel能同时监控多个Master
  • 复制的缺点
    • 由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

9 、常见配置redis.conf介绍

  • 参数说明

    • redis.conf 配置项说明如下

      1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
        daemonize no

      2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
        pidfile /var/run/redis.pid

      3. 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字
        port 6379

      4. 绑定的主机地址
        bind 127.0.0.1

      5. 当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
        timeout 300

      6. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
        loglevel verbose

      7. 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null
        logfile stdout

      8. 设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id
        databases 16

      9. 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
        save <seconds> <changes>
        Redis默认配置文件中提供了三个条件:
        save 900 1
        save 300 10
        save 60 10000
        分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。

      10. 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
        rdbcompression yes

      11. 指定本地数据库文件名,默认值为dump.rdb
        dbfilename dump.rdb

      12. 指定本地数据库存放目录
        dir ./

      13. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
        slaveof <masterip> <masterport>
      14. 当master服务设置了密码保护时,slav服务连接master的密码
        masterauth <master-password>

      15. 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭
        requirepass foobared

      16. 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
        maxclients 128

      17. 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
        maxmemory <bytes>

      18. 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
        appendonly no

      19. 指定更新日志文件名,默认为appendonly.aof
        appendfilename appendonly.aof

      20. 指定更新日志条件,共有3个可选值:
        no:表示等操作系统进行数据缓存同步到磁盘(快)
        always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
        everysec:表示每秒同步一次(折衷,默认值)
        appendfsync everysec

      21. 指定是否启用虚拟内存机制,默认值为no,简单的介绍一下,VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析Redis的VM机制)
        vm-enabled no

      22. 虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
        vm-swap-file /tmp/redis.swap

      23. 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据 就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0
        vm-max-memory 0

      24. Redis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的 数据大小来设定的,作者建议如果存储很多小对象,page大小最好设置为32或者64bytes;如果存储很大大对象,则可以使用更大的page,如果不 确定,就使用默认值
        vm-page-size 32

      25. 设置swap文件中的page数量,由于页表(一种表示页面空闲或使用的bitmap)是在放在内存中的,,在磁盘上每8个pages将消耗1byte的内存。
        vm-pages 134217728

      26. 设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟。默认值为4
        vm-max-threads 4

      27. 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启
        glueoutputbuf yes

      28. 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法
        hash-max-zipmap-entries 64
        hash-max-zipmap-value 512

      29. 指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)
        activerehashing yes

      30. 指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件
        include /path/to/local.conf

4、解析配置文件 redis.conf、Redis持久化RDB、Redis的主从复制的更多相关文章

  1. Redis之数据持久化RDB与AOF

    Redis之数据持久化RDB与AOF https://www.cnblogs.com/zackku/p/10087701.html 大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内 ...

  2. 进阶的Redis之数据持久化RDB与AOF

    大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内存数据库,它的操作都几乎基于内存.但是内存型数据库有一个很大的弊端,就是当数据库进程崩溃或系统重启的时候,如果内存数据不保存的话,里 ...

  3. redis 系列16 持久化 RDB

    一.概述 Redis是内存数据库,一旦服务器进程退出,服务器中的数据库内存数据状态也会消失.为了解决这个问题,Redis提供了RDB 持久化功能,这个功能可以将redis在内存中的数据库状态保存到磁盘 ...

  4. Redis的快照持久化-RDB与AOF

    Redis持久化功能 Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边. 数据保存到硬盘的过程就称为“持久化 ...

  5. redis学习之——持久化RDB 和AOF

    RDB: 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里.rdb 保存的是dump.rdb文件 RDB工作原理: Redis会 ...

  6. Linux 安装redis 基本配置 发布订阅,安全配置,持久化 rdb ,aof

    redis redis相关配置1.yum  源码 rpm  yum 快速,间接,高效,解决依赖关系,(自动安装到某个路径,不可控),通过yum安装的软件查询命令 rpm -ql nginx  yum源 ...

  7. [转]Reids配置文件redis.conf中文详解

    转自: Reids配置文件redis.conf中文详解 redis的各种配置都是在redis.conf文件中进行配置的. 有关其每项配置的中文详细解释如下: 对应的中文版解释redis.conf # ...

  8. redis持久化RDB与AOF

    redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持久化 ...

  9. redis持久化 (rdb

    RDB(快照持久化) RDB(redis database),可以理解为快照/内存快照,RDB持久化过程是将当前进程中的数据生成快照存储到硬盘中 触发机制RDB持久化的触发机制分为两种,手动触发和自动 ...

  10. 15.3,redis持久化RDB与AOF

    redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持久化 ...

随机推荐

  1. 中文字符匹配js正则表达式

    普遍使用的正则是[\u4e00-\u9fa5],但这个范围并不完整.例如:  /[\u4e00-\u9fa5]/.test( '⻏' ) // 测试部首⻏,返回false    根据Unicode 5 ...

  2. Mac 终端 Linux 命令总结(简单命令)

    目录操作 命令名 功能描述 使用举例 mkdir 创建一个目录 mkdir dirname rmdir 删除一个目录 rmdir dirname mvdir 移动或重命名一个目录 mvdir dir1 ...

  3. Spring MVC篇一、搭建Spring MVC框架

    本项目旨在搭建一个简单的Spring MVC框架,了解Spring MVC的基础配置等内容. 一.项目结构 本项目使用idea intellij创建,配合maven管理.整体的目录结构如图: 其中ja ...

  4. Map的keySet和entrySet

    /*Map集合的两种 取出方式 * 1.keySet() * 2.entrySet() * */ //定义一个学生类 重写了equals.hashcode三个方法,实现了comparable接口并覆盖 ...

  5. 【Beta】Daily Scrum Meeting第一次

    1.任务进度 学号 已完成 接下去要做 502 更换网络框架为okHttp 搭建好PHP单元测试环境,写出PHP测试的demo 509 PHP的login返回值:插入数据改为单行插入:系负责人更新单行 ...

  6. IOAPIC重定位中断处理函数思路整理

    因为小可并非硬件编程出身,汇编基础又比较差...所以刚开始理解利用IOAPIC重定位技术的时候相当困难. 何为IOAPIC? 首先,必须认识到它是一个硬件,可编程的硬件.我理解的它在整个流程中的作用如 ...

  7. 什么是XA事务

    什么是XA事务 分布式事务处理是指一个事务可能涉及多个数据库操作分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,提交或回滚事务必须产生一致的结果(全部提交或全部回滚). XA ...

  8. .Net开发笔记(十四) 基于“泵”的UDP通信(接上篇)

    上一篇中说到了“泵”在编程中的作用以及一些具体用处,但没有实际demo,可能不好理解,这篇文章我分享一个UDP通信的demo,大概实现了类似“飞鸽传书”在局域网中文本消息和文件传输的功能.功能不全也不 ...

  9. [.net 面向对象程序设计深入](3)UML——在Visual Studio 2013/2015中设计UML活动图

    [.net 面向对象程序设计深入](3)UML——在Visual Studio 2013/2015中设计UML活动图 1.活动图简介 定义:是阐明了业务用例实现的工作流程. 业务工作流程说明了业务为向 ...

  10. Python模拟HttpRequest的方法总结

    Python可以说是爬网的利器,本文主要介绍了一些python来模拟http请求的一些方法和技巧. Python处理请求的类库有两个,urllib,urllib2. 这两个类库并不是一个类库的两个不同 ...