zoukankan      html  css  js  c++  java
  • 缓存问题 (重点)

    缓存更新

    • 问题
      • mysql和redis是两个独立的系统, 在并发环境下, 无法保证更新的一致性
    • 解决办法
      • 设计分布式锁(redis-setnx)/使用消息队列串行处理
        • 缺点 并发能力差
      • 更新数据时, 先写入mysql, 再删除缓存 facebook
        • 主要用于 数据对象 (更新少)
        • 数据集合主要还是更新缓存 (更新多, 频繁查询成本高)

    缓存穿透

    • 问题

      • 黑客会主动访问数据库不存在的数据, 缓存会被穿透, 直接访问数据库, 导致数据库的的访问压力变大
    • 解决办法

      • 对于数据库中不存在的数据, 也对其在缓存中设置默认值 一般过期时间会比较短
      • 可以设置一些过滤规则, 如布隆过滤器(算法, 用于判断数据是否包含在集合中), 将所有可能的值录入过滤器, 如果不包含直接返回None, 有误杀概率
    • 布隆过滤器(拓展)

      pip install pybloomfiltermmap3

    缓存雪崩

    • 问题
      • 如果大量缓存数据都在同一个时间过期, 那么很可能出现缓存集体失效, 会导致所有的请求都直接访问数据库, 导致数据库压力过大
    • 解决办法
      • 设置过期时间时, 添加随机值, 让过期时间进行一定程度分散
      • 多级缓存的方式来处理
      • 利用锁/队列的形式
  • 相关阅读:
    HDU 4296 Buildings(贪心)
    HDU 4288 Coder(线段树)
    hdu 5073 Galaxy
    ZOJ 3905 Cake(贪心+dp)
    ZOJ 3903 Ant(公式推导)
    除法求逆元(扩展欧几里德和费马小定理)
    HDU 4442 Physical Examination(关于贪心排序)
    ACM vim配置
    2015 南阳ccpc The Battle of Chibi (uestc 1217)
    次小生成树(入门)
  • 原文地址:https://www.cnblogs.com/oklizz/p/11420234.html
Copyright © 2011-2022 走看看