Skip to main content Link Menu Expand (external link) Document Search Copy Copied

架构师-第六阶段:缓存架构

  • 缓存:进程内缓存要怎么玩?
    • 什么是进程内的缓存
      • 带锁的 map
      • leveldb
    • 进程内缓存能存储缓存服务有的数据(json、html、object)
    • 进程内缓存的好处,效率高,不需要访问 db
    • 不足:一致性难以保障
    • 方案:

    • 什么时候可以用进程内缓存
      • 只读数据
      • 并发极高,透传后端压力极大,例如:秒杀类业务
      • 允许一定程度上数据不一致

  • 缓存:很多时候我们都用错了!
    • 常见误用

    • 总结
      • 服务与服务之间不要通过缓存传递数据
      • 高可用缓存或者水平切分
      • 调用方不宜单独使用缓存
      • 不同服务,缓存应该做垂直拆分,不宜共用缓存

  • 缓存:互联网最佳实践!
    • 淘汰缓存,而不是更新缓存

    • 先操作数据库,再操作缓存

    • 总结

  • 缓存:一致性优化!
    • 缓存不一致出现在 数据库主从不一致

    • 数据库与缓存不一致

    • 解决思路:在主从同步完成后,如果有旧数据入缓存,应该及时把旧数据淘汰掉

    • 总结

  • 缓存:并发更新的大坑!
    • 并发申请微信的 token 会让 token 相互失效
    • 解决方案
    • 总结
  • 缓存:究竟选redis,还是memcache?
    • 什么时候选择 redis ?
      • 复杂的数据结构
      • 持久化
      • 天然高可用,自身支持集群
      • 存储的内容比较大
    • 什么时候选择 mc ?
      • 纯 KV
      • 存储 key 的数据量大、并发量大
      • 原因
        • 内存分配,预分配
        • 虚拟内存的使用,mc 存在物理内存里;redis 存在虚拟机里,当物理内存不够的时候,会频繁刷盘把数据写入到硬盘里,影响性能
        • redis的 CPU 计算复杂
        • 线程模型:mc 多线程(适合多核机器),redis 单线程
  • 千万级流量,架构该怎么玩?
    • 服务化

    • 数据库

    • 缓存


萌ICP备20240168号