缓存基础讲解

117 阅读2分钟

常见类型

客户端缓存

页面浏览器缓存、app缓存、h5缓存

CDN缓存

内容存储、内容分发(负载均衡)

nginx缓存

静态资源

服务端缓存

本地缓存(map/list)、外部缓存(redis...)

数据库缓存

持久层缓存(mybatis多级缓存)、查询缓存

操作系统缓存

page cache、buffer cache

过期策略

定时过期

每个key都需要创建一个定时器,对内存友好,但消耗cpu资源

惰性过期

访问一个key时才判断该key是否过期过期则清除,节省cpu资源但占用内存

定期过期

每隔一定时间,会扫描一定数量的数据库的expires字典中一定数量的key(随机)(折中方案)

优化方案

分桶策略

淘汰算法

FIFO--先进先出

根据缓存存储时间,离当前最远数据优先淘汰

LRU--最近最少使用

最近使用的时间,离当前最远数据优先淘汰

LFU--最不经常使用

一段时间内,缓存数据用的最少优先淘汰

注:当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下 降,缓存污染情况比较严重。这时使用LFU可能更好点。

使用场景

  • 热点商品详情页
  • 热搜
  • 热门帖子
  • 热门用户主页

注:一般在高并发场景下

常见问题

本地缓存优缺点

使用本地缓存好处:

  1. 减少网络请求提高性能
  2. 分布式系统中,天然分布式缓存
  3. 减少远程缓存压力

使用本地缓存缺点:

  1. 进程空间大小有限,不支持大数据量存储
  2. 重启程序会丢失数据
  3. 分布式场景下,系统之间数据可能存在不一致
  4. 和远地缓存可能存在不一致