Redis持久化

作者: RalapHao | 来源:发表于2017-07-23 22:49 被阅读0次

常规配置Redis.conf

  1. Redis默认不是以守护线程启动的,可用通过配置,使用yes启用守护线程启动

    daemonize no

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

    pidfile /var/run/redis.pid

  3. 指定Redis监听端口,默认是6379

    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. 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件中,可以多个条件配合

    save <seconds> <changes>
    Redis默认配置文件中提供三个条件:
    save 900 1
    save 300 10
    save 60 10000
    分别表示900秒(15分钟)内有一个更新。。。。。。。
    如果想手动保存 命令(save)

  9. 指定本地数据库存放目录

    dir ./

  10. 设置密码,如果设置了密码,AUTH <password>命令提供密码

    requirepass foocared

  11. 设置同一时间最大的客户端连接数,默认无限制,如果超出设置数,Redis会关闭新的连接冰向客户端返回max number of clients reached 错误

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

Redis的持久化

RDB(Redis DataBase)

优点

  • RDB是一个非常紧凑的文件
  • RDB在保存RDB文件时父进程唯一需要做的就是fork出一个进程,接下来的工作全部由子进程来做,父进程不需要做其他IO操作,所以RDB持久化方式可以最大化Redis的性能。
  • 与AOF相比,再回复大的数据集的时候,RDB方式会更快一些。

缺点

  • 数据丢失风险大
  • RDB需要经常fork子进程来保存数据集到硬盘上,当数据集比较大的时候,fork的过程是非常耗时的,可能会导致Redis在一些毫秒级不能响应客户端请求

AOF(Append Only File)

  • 修复aof文件

    redis-check-aop -fix appendonly.aop

  • 开启AOF持久化数据

    appendonly = yes

  • 持久化文件名称

    appendfilename

  • appendfsync (持久化策略)
    • Always 同步持久化,每次发生数据变更会被立即记录到磁盘,性能较差但数据的完整性比较好
    • Everysec:出厂默认推荐,异步操作,每秒记录,如果一秒内宕机,有数据丢失
    • NO
  • NO-appendfsync-on-rewrite:
  • 优势
    • AOF文件是一个进行追加的日志文件
    • Redis可以在AOF文件体积变得过大时,自动的在后台对AOF进行重写
    • AOF文件有序的保存了对数据库执行的所有写操作,这些写入操作以Redis协议的格式保存,因此AOF文件的内容非常容易被人读懂,对文件进行分析也很轻松
  • 缺点
    • 对相同的数据集来说,AOF文件的体积通常要大于RDB文件的体积
    • 更加就所有使用的方式fsync策略,AOF的速度可能会慢于RDB
  • 官方建议
    • RDB持久化方式能在指定的时间间隔能对你的数据进行快照存储
    • AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来回复原始的数据,AOF命令以Redis协议追加保存每次写的操作到文件的末尾。
    • Redis还能对AOF文件进行后台重写,是的AOF文件的体积不至于过大
    • 只做缓存:如果你只希望你的数据在服务器运行的时候存在,你也可以不适用任何持久化方式
    • 同时开启俩种持久化方式:
      • 这种情况下,当redis重启的时候会优先载入AOF文件来回复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。
      • RDB的数据不实时,同时使用两者时服务器重启时也只会找AOF文件,那要不要只使用AOF呢?建议不要,应为RDB更合适用于备份数据库(AOF在不断变化不好备份),快速重启,而且不会有AOF可能潜在的bug,留着作为一个万一的手段。

相关文章

网友评论

    本文标题:Redis持久化

    本文链接:https://www.haomeiwen.com/subject/uehvkxtx.html