缓存的缘起
使用缓存的主要原因包括提高系统性能、降低数据库负载、提升用户体验和保证系统可用性。
在计算机体系结构中,由于处理器和存储器的处理时间不匹配,在处理器和一个较大较慢的设备之间插入一个更小更快的存储设备(如高速缓存)成为现代设计和实现的一个普遍观念。下图是一个典型的存储器层次结构(来自《深入理解计算机系统·第三版》):
进入互联网时代后,基于网络的分布式系统逐步成为主流。互联网应用的用户多、访问量大,用户对系统响应时间感知很敏感,因此对系统提出来新的要求。
与CPU的时间相比,单个用户要求的响应时间很长,如果是人工操作,可能到百毫秒级即可;如果是服务调用,可能要求在毫秒级。数量庞大的请求量则对系统的处理能力提出了新的挑战,也产生了众多的解决方案。
在这些解决方案中,主流的方案之一是使用缓存。根据应用服务功能的特性,提供各种各样的缓存机制。
应用缓存的原理:
与处理器和存储器的处理时间不匹配类似.
处理请求和响应不匹配的本质仍然是处理时间不匹配。
造成响应时间长的典型原因有以下几种:
- 业务逻辑的复杂性增加了响应的时间;
- 物理资源的限制引起资源的竞争、排队,从而延长了响应时间;
- 访问量的突发性,加剧了上述问题的发生概率;
- 利用上述特性进行主动/恶意攻击,加剧了上述问题发生几率。
缓存的分类
根据缓存所处的位置、担任的角色不同,缓存具有不同的分类方法。
根据缓存在应用中的位置,可以分为浏览器缓存、客户端缓存、服务器缓存、数据库缓存等。
根据缓存的放置方式,可以分为本地缓存、分布式缓存等。
根据缓存的生命周期,有不过期缓存和带过期时间缓存。
几点注意
由于增加了缓存这一中间交互,不可避免的增加了复杂度,也就引出了一些相关的问题点需要注意。
数据不一致
最典型的,是缓存数据和数据库的数据不一致。
其次,如果是分布式缓存,如果存在节点异常,可能会存在多个节点的数据不一致,有脏数据。
热点问题
对于突发事件、重大热点、秒杀、抢票等类似问题,如果采用缓存,相应的数据就会变成热点(hotkey),需要避免热点问题带来的系统崩溃。
缓存雪崩、穿透、击穿
缓存雪崩,是指大量的缓存(不同缓存key)同时大面积失效,导致缓存无效从而导致后端数据库系统的压力过大而崩溃。
缓存穿透,是指请求到空数据,缓存和数据库中都不存在,每次都会落到数据库查询。
缓存击穿,大量请求命中不到缓存而查到数据库,而这些请求请求的是同一条数据。这一点与缓存雪崩有显著差别。
小结
本文根据缓存的来源,简要的介绍了缓存的来源、分类和注意事项,便于对缓存有个概念上的了解。在后续内容将会介绍具体实践内容,以便于更细致的了解。