高并发系统设计(三)缓存 未完

广义上讲,凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,均可称之为缓存
是一种常见的空间换时间的性能优化手段

常见案例

  • Linux MMU 使用LTB来缓存最近虚拟地址和物理地址的映射。
  • 刷视频预缓存下一个视频
  • HTTP协议 ETag

缓存与缓冲区

缓存区是用于弥补高速设备和低速设备通信时的速度差。一块临时存储数据的区域,这些数据后面会一次性传输到其他设备上

缓存分类

  • 静态缓存
    HTML,对动态请求的数据无力。
  • 分布式缓存
    Redis、Memcached
  • 热点本地缓存
    极端的热点数据查询。 HashMap,Guava Cache

缓存的不足

系统复杂度、数据不一致、运维、内存有限,比较适合读多写少,数据带有一点热点属性的业务场景

缓存的读写策略

  • Cache Aside 旁路缓存策略

    • 读策略
      • 从缓存中读取数据
      • 命中,直接返回
      • 不命中,从数据库中查
      • 查后,数据写入缓存,并返回给用户
    • 写策略
      • 更新数据库中的记录
      • 删除缓存
        最常用,但当写入比较频繁时,缓存中的数据会被频繁地清理。
  • Read/Write Through 读穿/写穿策略

由缓存节点而非用户来和数据库打交道,并且写数据库是同步的,对性能来说比较大影响

  • Write Back 写回策略
    在写入数据时只写入缓存,并把缓存块标记为“脏”,脏块只有被再次使用时才会将其中的数据写回后端存储中

分布式缓存高可用方案

  • 客户端方案

    • 缓存数据如何分片

      • Hash分片算法

      • 一致性Hash分片算法

    • Memcached的主从机制

    • 多副本

  • 中间代理层方案

  • 服务端方案

缓存穿透

缓存中没有查到数据,不得不从后端系统中查询的情况。

posted @ 2019-10-29 17:54  james_cai  阅读(293)  评论(0)    收藏  举报