首页 > 编程学习 > Redis持久化

Redis持久化

发布时间:2022/1/17 12:20:22
redis的数据是保存在内存中的,因此需要将数据写入到磁盘中才能使redis服务关闭后数据不丢失

RDB持久化:

1.数据保存在.rdb文件中,因此叫做RDB持久化
2.命令:BGSAVE(并行),SAVE(串行,redis服务会被堵塞)
3.自动触发BGSAVE命令:
    在redis.windows.conf中添加 save seconds count 表示在seconds时间内发生了count次key的修改,
    就执行BGSAVE命令,可以设置多条该配置,只要有一条满足就执行命令
4.shutdown save | nosave
    将关闭redis服务
    停止所有客户端.
    如果配置了save 策略 则执行一个阻塞的save命令.
    如果开启了AOF,则刷新aof文件..
    关闭redis服务进程(redis-server).
5.自定义.rdb文件:
    1)定义.rdb文件名:redis.windows.conf中修改 dbfilename 文件名
    2)定义.rdb文件路径:修改 dir 路径

AOF持久化:

1.将执行过的所有的写命令写入.aof到日志文件中,只要将日志中的命令全都执行一遍,就能恢复数据。redis 
  在启动服务时会读取该文件
2.开启AOF持久化:redis.windows.conf中修改 appendonly yes 开启持久化
3.设置.aof文件名:appendfilename 文件名
4.日志追加频率:
    1)always: 每次执行写操作,就往日志写入一次。最好不用这个
    2)everysec: 每秒往日志文件中写入一次,建议使用
    3)no: 由操作系统决定何时写入
  在redis.windows.conf中修改 appendfsync everysec
5.aof文件重写:
    1).日志文件随着的命令写入会越来越大,可以使用重写来减小文件体积,根据当前数据库的内容重新生成 
       一个aof文件,将旧.aof文件覆盖
    2).命令:bgrewriteaof
    3).redis.windows.conf中修改 auto-aof-rewrite-percentage和auto-aof-rewrite-min-size
       如果设置auto-aof-rewrite-percentage值为100和auto-aof-rewrite-min-size 64mb,并且启用的            
       AOF持久化时,那么当AOF文件体积大于64M,并且AOF文件的体积比上一次重写之后体积大了至少一倍 
      (100%)时,会自动触发
6.重写原理:
   1).redis调用fork ,现在有父子两个进程, 子进程根据内存中的数据库快照,往临时文件中写入重建数据 
      库状态的命令
   2).父进程继续处理client请求,除了把写命令写入到旧的aof文件中。同时把收到的写命令缓存起来。这 
      样就能保证如果子进程重写失败的话并不会出问题。
   3).当子进程把快照内容写入已命令方式写到临时文件中后,子进程发信号通知父进程。然后父进程把缓存 
      的写命令也写入到临时文件。
   4).现在父进程可以使用临时文件替换老的aof文件,并重命名,后面收到的写命令也开始往新的aof文件中 
      追加。
Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000