缓存分类
- 静态缓存、分布式缓存、热点本地缓存。
- 静态缓存通过生成 Velocity 模板或者静态 HTML 文件来实现。部署在Nginx,可以减少对于应用服务器的压力。
- 分布式缓存典型的就是我们平常用来存储动态数据的redis。
- 热点本地缓存指的是一些极端热点的数据,比如某凡的瓜,主要部署在代码层面,阻挡热点查询对于分布式缓存节点和数据库节点的压力。
由于本地缓存是部署在应用服务器中,而应用服务器通常会部署多台,当数据更新时,不能确定哪台服务器本地中了缓存,更新或者删除所有服务器的缓存不是一个好的选择,所以通常会等待缓存过期。因此,这种缓存的有效期很短,通常为分钟或者秒级别,以避免返回前端脏数据
。
缓存的不足
- 适合读多写少的业务场景,数据最好有一定热点属性;如果是搜索这种,每个人搜索词都不同,没有明显热点,缓存命中率就会比较低,作用就不会那么明显了。
- 缓存会给系统带来复杂度,并且会有数据不一致的风险。比如更新数据库成功,而更新缓存失败;再比如多个系统间的交互各有各的缓存。这种场景需要考虑设置较短过期时间,或者手动清理。
- 缓存通常使用内存作为存储介质,但是内存空间有限。所以使用缓存要做数据量级的评估,对于可预见的需要消耗大量存储成本的数据要慎用。
- 缓存也会给运维带来成本。
Cache Aside 旁路缓存
- 更新数据时不更新缓存,而是删除缓存中的数据,在读取数据时,发现缓存中没了数据之后,