Redis相关问题及方案

缓存服务的相关问题

缓存预热

  • 系统刚启动时,主从数据同步压力和客户端请求压力可能使其直接宕机
    • 缓存预热即系统启动前,先将相关的热点数据直接加载到缓存系统,避免在用户请求时要先查询数据库再写入缓存。

缓存雪崩

  • 短时间内大量的数据过期,redis未命中,数据库查询压力集中爆发,数据库瘫痪,导致服务瘫痪,redis服务失效。重启系统依然无法解决。

    1. 解决途径
      • 更多使用页面静态化,减少用户请求次数
      • 构建多级缓存架构:Nginx缓存+Redis缓存+Ehcache缓存
      • MySQL耗时业务优化,数据库瓶颈排查
      • 灾难预警进制,监控redis服务器性能指标
      • 限流、降级:短时间牺牲部分用户体验,限制某些请求,降低应用服务器压力
    2. 解决方案
      • LRU与LDU切换
      • 数据有效期策略调整
        • 根据业务数据错峰调整,分批不同时效
        • 采用固定时间+短随机时间的到期时间,稀释过期数据密度(常用推荐)
      • 超热数据永久有效
      • 定期维护,对即将过期数据做数据访问量分析,维护时效性(脚本/人工)
      • 加锁(慎用)

缓存击穿

  • 某单个数据过期,而该key暴热,大量数据库请求同时向服务器查询相同数据,导致数据库瘫痪。
    • 单个不确定数据监控难度较大,需在业务数据分析和预防方面着手,配合雪崩策略

缓存穿透

  • redis大面积出现未命中现象,数据库压力变大,出现大量非正常URL访问,通常为黑客攻击
    • 对数据库中不存在的查询结果缓存null,降低重复攻击时数据库压力
    • 访问白名单策略
      • 设置对应请求id的bitmaps,简单拦截异常请求
      • 使用布隆过滤器
    • 实时监控缓存命中率与null数据的波动
    • 对数据key进行混淆加密,外部不知道加密规则,检测到非法key直接驳回请求
    • 加锁(NO)

你可能感兴趣的:(Redis)