zoukankan      html  css  js  c++  java
  • Redis(二)

     

    一. Redis中的数据 删除策略??

    1.  删除策略:
      •  针对 已过期 数据的处理策略
    2. 三种策略:
      •  定时删除
      •    惰性删除(默认)
      •    定期删除(默认)
    3. 定时删除(极端):
      •    性能换空间(时间换空间)
      •    过期,立即删除
    4. 惰性删除(极端):
      •  空间换性能(空间换时间)
      •     过期,再次访问,判断删除
    5. 定期删除(折中):
      •  周期性抽查存储空间(随机抽查,重点抽查)
      •    每秒钟执行server.hz次serverCron()-------->databasesCron()--------->activeExpireCycle()对每个expires[*]逐一进行检测,随机挑选W个key检测
        •  如果key超时,删除key
        •  如果一轮中删除的key的数量>W*25%,循环该过程
        •  如果一轮中删除的key的数量≤W*25%,检查下一个expires[*],0-15循环
        •  W取值=ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP属性值

    二. Redis中的数据 淘汰策略??

    1.  淘汰策略:
      •  新数据加入,检测内存是否充足,不充足,临时删除一些数据,为新加入数据,腾空间,此策略为逐出算法
    2. 策略配置:
      •  最大可使用内存
      •    每次选取待删除数据的个数
      •    对数据进行删除的选择策略
    3.  删除策略:(3类8种)
      •  第一类:  检测易失数据
        • volatile-lru:挑选最近最少使用(最近不用的)的数据淘汰
        • volatile-lfu:挑选最近使用次数最少的数据淘汰
        • volatile-ttl:挑选将要过期的数据淘汰
        • volatile-random:任意选择数据淘汰
      •    第二类:     检测全库数据
        • allkeys-lru:挑选最近最少使用的数据淘汰
        • allkeLyRs-lfu::挑选最近使用次数最少的数据淘汰
        • allkeys-random:任意选择数据淘汰,相当于随机
      •    第三类:     放弃数据驱逐
        • no-enviction(驱逐):禁止驱逐数据(redis4.0中默认策略),会引发OOM(Out Of Memory)
    4. 淘汰策略配置依据:
      •   查看监控信息中的缓存hit和miss次数,根据业务需求调优Redis配置

    三. 什么是主从复制??

    1. 主从复制:
      • 将master中的数据,即时&有效复制到slave中
    2. 主从特征:
      • 一个master可以拥有多个slave(一对多)
      • 一个slave只对应一个master(一对一)
    3. 主从职责:
      • 主(master):
        • 数据
        • 同步数据至slave
        •    读数据
      • 从(slave):
        • 数据
    4. 作用:
      • 读写分离 : master写; slave读
      • 负载均衡 : slave 分担 master 负载
      • 故障恢复 : master宕机, slave提供服务
      • 数据冗余 : 实现数据 热备份
      • 高可用基石 : 基于主从复制,构建哨兵模式与集群, 实现高可用方案

    四. 主从复制的工作流程 以及 常见问题 及 解决方案??

    1.  工作流程:(3个阶段)
      •  建立连接阶段
      •     数据同步阶段
      •     命令传播阶段(反复同步)
    2.  常见问题 及 解决方案: 
      •  频繁全量复制
        •  修改复制缓冲区大小
      •    频繁网络中断
        •  通过设置合理的超时时间,确认是否释放slave
      •    数据不一致
        •  设置暂时屏蔽程序对该slave的数据访问(慎用,除非对数据一致性要求很高)

    五. 什么是哨兵??

    1.  哨兵:
      •  管理多个Redis服务器的分布式系统
      •     用于对主从结构(非集群)中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。
    2.  注意:
      •  哨兵 也是一台Redis服务器, 只是不提供数据相关服务
      •    哨兵 redis服务器数量配置为单数

    六. 哨兵的作用 ,工作原理 ??

    1. 作用:
      •    监控 : 主从服务器 运行,存活状态
      •    通知 : 被监控的服务器出现问题,向其他哨兵发送通知
      •    自动故障转移 : 断开主从之间连接,选取一个从服务器作为主服务器,其他从服务器来连接此主服务器,并告知客户端新服务器地址
    2. 工作原理
      •   略

    七. 如何使用哨兵??

    •  略

    八. 什么是缓存预热??

    •  出现场景:
      •   服务器启动后迅速宕机
    •  原因:
      •   大量请求同时进入缓存获取数据,但是没有数据,于是去数据库获取,再存入缓存,造成了短时间内对Redis的高强度操作导致的迅速宕机
    • 缓存预热:
      •   缓存预热就是系统启动前,提前将相关的缓存数据直接加载到缓存系统。用户直接查询事先被预热好的缓存数据。避免,用户请求的时候,再去加载相关的数据。
    • 解决方案:
      •   Kafka

    九. 什么是缓存雪崩??

    •  出现场景:
      •   Redis服务器奔溃
      •        数据库奔溃
      •        ........等等
    •  原因:
      •   在一个较短的时间内,缓存中较多的key集中过期
    • 缓存雪崩:
      •   缓存雪崩就是瞬间过期数据量太大,导致对数据库服务器造成压力。
    • 解决方案:
      •   超热数据使用永久key
      •        定期维护(自动+人工)
      •        设置热点数据有效期错峰:固定值+随机值,避免同时失效的情况

    十. 什么是缓存穿??

    •  出现场景:
      •        数据库奔溃
      •       但Redis正常
    •  原因:
      •   Redis中某个key过期,该key访问量巨大
      •   大量请求统一数据到Redis后,都未命中
      •        直接击穿了Redis,短时间内直接访问数据库,
      •        导致数据库压力瞬间变大,直至奔溃
    • 缓存击穿:
      •   缓存击穿就是单个高热数据过期的瞬间,数据访问量较大,未命中redis后,发起了大量对同一数据的数据库访问,导致对数据库服务器造成压力。
    • 解决方案:
      •  预先设定
      •    现场调整
      •    后台刷新数据
      •    二级缓存

    十一. 什么是缓存穿透??

    •  出现场景:
      •        数据库奔溃
      •       但Redis正常
    •  原因:
      •   Redis中大面积出现未命中
      •   出现非正常URL访问
    • 缓存击穿:
      •   缓存击穿就是指访问了不存在的数据,跳过了合法数据的redis数据缓存阶段,每次访问数据库,导致对数据库服务器造成压力。
    • 解决方案:
      •        在用户第一次请求时,如果找不到数据,就在redis中为用户请求的key设置value为null,或者使用布隆过滤器

    十二. Redis相关的监控指标??

    1. 性能指标:Performance
      • 响应请求的平均时间
      • 平均每秒处理请求总数
      • 缓存查询命中率
    2. 内存指标:Memory
      • 当前内存使用量
      • 内存碎片率
      • 为避免内存溢出删除的key的总数量
      • 基于阻塞操作(BLPOP等)影响的客户端数量
    3. 基本活动指标:Basic_activity
      • 当前客户端连接总数
      • 当前连接slave总数
      • 最后一次主从信息交换距现在的秒
      • key的总数
    4. 持久性指标:Persistence
      • 当前服务器最后一次RDB持久化的时间
      • 当前服务器最后一次RDB持久化后数据变化总量
    5. 错误指标:Error
      • 被拒绝连接的客户端总数
      • key未命中的总次数
      • 主从断开的秒数
  • 相关阅读:
    window系统中,解决Pycharm 文件更改目录后,执行路径未更新问题(转)
    yum安装软件报错–skip-broken(卸载的时候一直报错:未安装软件包)
    selenium之Chrome浏览器与chromedriver对应关系和下载
    Python 第三方库 批量下载安装包,离线批量安装Python第三方库
    UIpath 循环读取IMAP邮件,并保存附件
    UIpath 中如何使用 正则表达式
    用python实现队列,堆栈
    python-反射
    Python基础-父类对子类的约束
    Python基础-类的继承顺序
  • 原文地址:https://www.cnblogs.com/bin563597293/p/14371573.html
Copyright © 2011-2022 走看看