2020.6.2 Redis Day3

发布于 2020-06-02  47 次阅读


1.复习内容

2.灵感代办

  • redis 集合的运算操作(交集并集差集)

  • 三角函数

  • 问题:上课容易看手机

    • 解决:应该讲手机放远一些

3.学习内容

  • Redis数据持久化 ——RDB方式 (存数据)

    • 特点:

      • 保存真实数据,二进制形式保存在硬盘文件中
      • 默认文件名:/var/lib/redis/dump.rdb
      • dump文件的路径(配置文件中)
        • dir /var/lib/redis 表示rdb等文件存放路径
        • dbfilename dump.rdb
      • logfile 查看redis操作日志
    • RDB缺点

      • RDB将服务器所有数据保存起来,非常耗费资源,隔一段时间才能备份,否则严重影响服务器性能
      • 会丢失一些数据
    • 创建rdb文件的两种方式:

      • 方式一(推荐使用)

        • 设置配置文件中的条件,满足时候自己备份
        • 使用:
          • 命令行:save 300 10
            • 300是距离上次备份的秒
            • 10是修改redis的次数
            • 执行的操作是bgsave
            • 多个条件,满足一个就执行
      • 方式二:

        • 特点:
          • redis服务器会被阻塞,完成命令才会处理请求,如果存在RDB则覆盖文件
        • 使用时机:
          • 人少时候定时备份,
        • 命令
          • SAVE 或者 BGSAVE
          • BGSAVE就是开一个进程去备份,可以继续处理redis请求(消耗更多资源)
  • Redis数据持久化——AOF(AppendOnlyFile)

    • 特点:

      • 默认没有开启
      • 将redis的命令保存下来
    • 配置文件中

      • 选项:appednonly yes

        • 打开AOF数据持久化
      • 选项:appendfilename “appendonly.aof”

        • append文件名称
      • 选项:appendfsync

        • alwarys(速度慢)
          • 写入一条命令,就将命令保存,不丢失数据
        • everysec(默认选项,很快)
          • 每一秒将命令写入文件,顶多丢失一秒数据
        • no(很快)
          • 不主动写入,由操作系统决定,丢失数据不确定
    • AOF持久化的原理以及优点

      • 原理:
        • 修改数据命令执行,这条命令就被添加到AOF文件末尾
        • 执行AOF命令,就可以还原数据
      • 优点:
        • 根据自己需求调整AOF,在意外情况丢失很少的数据(一秒钟)
    • AOF文件中是否会产生冗余

      • 问题:
        • AOF一直存放,大小也会成倍增加
        • AOF文件冗余,读写速度慢
      • 解决
        • 重写AOF文件,产生一个新的AOF文件,类似压缩一下
        • AOF重写期间,服务器不阻塞
      • 重写方法:
        • 1.手动重写
          • BFREWRITEAOF
        • 2.设定规则,自动重写
          • auto-aof-rewrite-percentage 100
            • 增加一倍大小(100%),重写
          • auto-aof-rewrite-min-size 64mb
            • 增加64Mb就重写一次
      • 重写规则:
        • 将命令简化,合并
        • 多个hset 编程hmset
    • 安全问题

      • 系统写入文件有一个buffer区,填充满了才会写入数据,所以不能保证AOF不会丢失数据
      • 当命令真实写入文件,才不会丢失
      • 停机时丢失的数量,取决命令写入的速度
      • 越早写入硬盘,停机时丢的数据越少
  • RDB和AOF备份的区别

    • redis存放重要数据,一条都不能丢失,要是用always
    • 一个服务器可以开多个redis服务
    • redis可以用来缓存,可以用来存放数据
    • RDB持久化 AOF持久化
      全量备份,一次保存全部 增量备份,一次保存一个阶段
      保存间隔长 默认一秒钟,随时可保存
      数据还原快 数据还原略慢
      SAVE命令阻塞,手动BGSAVE命令不阻塞 AOF不会阻塞服务器
      更适合数据备份 适合保存数据
  • Redis主从复制

    • 原理:
      • 1.一个主服务器Master,多个从服务器Slaves
      • 2.网络正常,Master会将自己数据更新同步给slaves
      • 3.master可以读写,slaves只能读
    • 方式一:
      • redis-server –port 6300 –slaveof 127.0.0.1 6379
      • 在本地主机开一个redis 端口6300 ,属于本地6379 redis
      • slaveof no one是取消主从服务器
    • 方式二:
      • 在从数据控中设置
      • 登录redis,进入命令行中
      • slaveof 127.0.0.1 6379
      • slaveof no one是取消主从服务器
    • 方式三 修改配置文件:
      • 修改配置文件
        • 配置文件名:redis_6300.conf
        • 选项:slaveof 127.0.0.1 6379
        • 选项:port 6300
    • 主从服务器的问题总结
      • master可以有多个slave,slave下线问题不大
      • maser下线,无法处理请求,问题很大
      • 使用一台主机,让他slaveof no one 变成主服务器
      • 让其余从服务器指向这台主服务器
      • 以上过程,可以用sentine哨兵,实现故障转移操作
  • Redis 哨兵Sentinel官方提供高可用

    • 原理
      • sentinel 不断检查master和slave是否运行正常
      • 每一个sentinel 可以监控多个master和slaves
    • 使用:
      • 1.安装sentinel程序
      • 2.新建配置文件sentinel.conf
      • 3.写入配置
        • port 26379
        • Sentinel monitor name 127.0.0.1 6379 1
        • 最后的参数是投票机制,最好是单数
      • 4.启动sentinel
        • redis-sentinel sentinel.conf(常用方式)
        • redis-sentinel sentinel.conf –sentinel
  • Redis 分布式锁

    • 加锁就相当于 set key value nx
      • 不能创建内容,所以拿不到1,不能执行里面代码
    • 解锁就相当于 del key

4.扩展延伸知识

  • python中使用redis多个参数

    • 可能使用字典,使用元组
  • liunx查看文件倒数文件,正数文件

  • python读取配置文件

  • python上下文

    • 个人理解就是上面可以开始一部分(进入),中间一部分(操作),下面一部分(离开)
    • python上下文管理器规定了某个对象的使用范围,当进入或者离开了使用范围,会有相应的操作,多用于资源的分配和释放上,即在开始时分配资源,结束时释放资源。
    • @contextmanager 注解和yield语句结合使用
  • python with操作

    • 不能对任意对象使用with,需要上下文管理
    • from contextlib import contextmanager
      • 可以将类编程上下文处理方式解决问题
    • 如果with带as 需要__enter__返回对象,__exit__方法用来退出销毁,with目标要是一个对象,而不是一个类

5.知识内容个人梳理

6.今天都复习了之前的什么内容


Ares个人进阶之路