特征

命中率、最大空间、清空策略

过期数据删除策略

  • 惰性删除:只会在取出 key 的时候才对数据进行过期检查。对 CPU 友好,但是可能会造成太多过期 key 没有被删除
  • 定期删除:每隔一段时间抽取一批 key 执行删除过期 key 操作。通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响。

清空策略

  • FIFO(first in first out):先进先出。算法比较创建时间。数据实效性场景
  • LFU(less frequently used):使用次数。算法比较命中次数。高频数据场景
  • LRU(least recently used):最近最少使用。算法比较最近被get时间。热点数据场景

本地缓存

在应用中的缓存组件,不适用于共享缓存。Guava Cache

分布式缓存

与应用分离的缓存。redis

读写策略

Cache Aside(旁路缓存)

以DB数据为准,按需加载到cache

  • 读:有cache ? 返回 : 读DB后更新cache
  • 写:更新DB后删除cache

Read/Write Through(读写穿透)

把cache视为主要数据存储,缓存和DB通信

Write Back(写回)

异步更新DB

问题

缓存穿透

读服务大量请求一些不可能存在在缓存里的数据

参数校验,布隆过滤器

缓存雪崩

在某个时间,有大量缓存键过期

错开过期时间

缓存击穿

由于一个或少量几个热键过期导致

热键特殊处理,热键不过期