• Part_three:Redis持久化存储


    redis持久化存储

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

    1.RDB持久化

    • redis提供了RDB持久化的功能,这个功能可以将redis在内存中的状态数据保存到磁盘

    • 触发机制:

      • 手动执行save命令
      • 或者配置触发条件
    • 配置文件:s21_rdb.conf

      • 配置核心参数:
        • dbfilename s21redis.rdb
        • save 900 1
      daemonize yes
      port 6379
      logfile /data/6379/redis.log
      dir /data/6379            		  #定义持久化文件存储位置/data/6379
      dbfilename  s21redis.rdb        		#rdb持久化文件s21redis.rdb
      bind  127.0.0.1   		 #redis绑定地址
      #save 900 1                  		  #
      #save 200 10 #在200秒中内,超过10个修改类的操作
      save  20  2               		 #
      
      
      • 创建文件夹 data/6379
      [root@xujunk s21redis]#mkdir -p /data/6379/
      
      
      • 开启redis-server
      [root@xujunk s21redis]#redis-server s21_rdb.conf
      
      查看启动状态:
      [root@xujunk s21redis]#ps -ef |grep redis
      """
      root      22057      1  0 17:14 ?        00:00:00 redis-server 127.0.0.1:6379
      
      """
      
      
      • 启动redis-cli端,并进行操作
      [root@xujunk redis-4.0.10]#redis-cli
      #咱们设置save 为20秒内 操作2次。所以这里最少操作2次
      [root@xujunk redis-4.0.10]#set name haha
      [root@xujunk redis-4.0.10]#set name2 haha
      
      • 查看存储为位置:
      [root@xujunk s21redis]#ls /data/6379
      redis.log  s21redis.rdb
      #此时生成2个文件。
      
      • 杀死所有redis
      pkill -9 redis
      
      • 再次进入redis
      [root@xujunk s21redis]#redis-server s21_rdb.conf
      [root@xujunk s21redis]#redis-cli
      127.0.0.1:6379> keys *
      1) "name2"
      2) "name3"
      #此时数据达到持久化存储
      

    2.第二个机制:AOF机制

    • AOF机制,将你的修改类操作命令,追加到日志文件中

      • 记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集
    • AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾,追加文件方式。

      • 优点:最大程序保证数据不丢,RDB在没有触发save机制之前就宕机了,那么数据就没了。
      • 缺点:日志记录非常大
    • 追加文件:用在文件末尾追加记录的方式,对Redis写入的数据,依次进行持久化,所以它的持久化是更加安全的。

    • 此外,它还提供一个用appendfsync选项设置fsync的策略,确保写入的数据都落到磁盘中,具体选项包括always,everysec,no等。

    • 修改aof 配置文件添加如下参数 ,核心功能参数是:

      appendonly yes
      appendfsync  always    总是修改类的操作
                   everysec   每秒做一次持久化
                   no     依赖于系统自带的缓存大小机制
      
    • AOF存储示例

      • 创建配置文件并且编辑配置:

        [root@xujunk s21redis]#touch s21_aof.conf
        [root@xujunk s21redis]#vim s21_aof.conf 
            daemonize yes
            port 6379
            dir /data/6379
            appendonly yes
            appendfsync everysec
            logfile /data/6379/redis.log	
        
      • 以自己配置文件 启动redis

        [root@xujunk 6379]#redis-server /opt/s21redis/s21_aof.conf 
        
        [root@xujunk 6379]#ls
        appendonly.aof  redis.log
        #此时6379目录生成2个文件。实时存储
        
        #实时监控存储数据文件
        [root@xujunk 6379]#tail -f appendonly.aof
        
        #另起一个窗口启动客户端,操作redis
        [root@xujunk s21redis]#redis-cli
        127.0.0.1:6379> set name "www"
        OK
        
        #监控客户端实时输出存入结果:
        *2
        $6
        SELECT
        $1
        0
        *3
        $3
        set
        $4
        name
        $3
        www
        
    • redis 持久化方式有哪些?有什么区别?

      rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能
      
      aof:以追加的方式记录redis操作日志的文件。可以最大程度的保证redis数据安全,类似于mysql的binlog
      

    3.redis持久化rdb切换aof备份

    • 本文在redis4.0中,通过config set命令,达到不重启redis服务,从RDB持久化切换为AOF

    • 查看redis版本

      [root@xujunk s21redis]#redis-server -v
      Redis server v=4.0.10 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=f4e8cdb9b08f1cb0
      
      
    • rdb模式下的redis持久化,不重启切换为 aof模式

      • 手动操作:

        redis内切换:
        config set appendonly yes
        config set save ""
        
      • 环境准备:更改s21_rdb.conf配置

        #准备rdb配置文件
        	daemonize yes
            port 6379
            logfile /data/6379/redis.log
            dir /data/6379            		  #定义持久化文件存储位置/data/6379
            #dbfilename  s21redis.rdb        		#rdb持久化文件s21redis.rdb
            bind  127.0.0.1   		 #redis绑定地址
            #save 900 1                  		  #
            #save 200 10 #在200秒中内,超过10个修改类的操作
            save  20  2  
            appendonly yes
            appendfsync always
        
      • 删除rdb保存文件

        [root@xujunk 6379]#rm -rf dump.rdb
        
      • 重启redis server端部

        [root@xujunk 6379]#redis-server /opt/s21redis/s21_rdb.conf
        
      • 启动客户端

        [root@xujunk 6379]#redis-cli
        127.0.0.1:6379> keys *
        1) "name"
        #在没有重启redis-server端实现RDB---->AOF(切换)
        
      • 详情看博客:https://www.cnblogs.com/pyyu/p/10061526.html

      • 注意想要永久切换为aof,还得修改配置文件方可

  • 相关阅读:
    DDOS攻击事件记录
    ansible批量安装zabbix客户端并实现自动发现功能
    利用api更新域名解析ip+端口转发【2】
    利用api更新域名解析ip+端口转发【1】
    网站春节开市休市设置
    获取内网路由器管理页面出口ip
    关于nginx加载配置文件的巨坑
    活动封禁刷票ip
    二十五个Python高级开发技巧,终极干货!建议收藏学习!
    一则故事带你秒懂Python GIL原理!
  • 原文地址:https://www.cnblogs.com/xujunkai/p/11563672.html
Copyright © 2020-2023  润新知