cache(缓存),本义是指访问速度比一般随机存取存储器(RAM)更快的高速存储器。Cache一词来源于1967年的一篇电子工程期刊论文,用于计算机工程领域。
1.2 缓存的发展?问题:初始PC处理器CPU没有缓存,CPU直接访问内存数据,访问数据的速度无法匹配CPU的处理速度。
意思是:后来Intel公司给CPU增加了可选缓存的支持。当CPU处理数据时,它将首先在缓存中查找数据。如果由于之前的操作,数据已经临时存储在其中,则没有必要从主存储器中读取数据,从而加快了数据读取速度。
优化:添加L2缓存(L2缓存),甚至L3缓存、Cache等。在CPU内核中。
1.3 缓存概念的扩充现在我们知道缓存的概念不仅限于CPU和主存之间,还包括硬盘和网络之间,软件和硬件之间,系统应用和数据库之间。
总之,任何位于两个数据处理速度差异较大的介质之间,用于协调两者之间数据传输速度差异的结构,都可以称为Cache。
1.4 缓存在应用服务中的发展随着网络的发展和普及,用户数量越来越多,我们的应用服务器和数据库服务器需要同时处理大量的请求和数据计算。然而,我们的应用服务器资源有限,数据库处理请求的能力也存在瓶颈。如何利用有限的资源承载更高的并发,提高应用的吞吐量?比较有效的方法之一就是引入缓存。即通过缓存,快速访问并返回所需数据,从而减少系统交互,提高计算响应能力。
简而言之,尽可能把数据放在最近、最直接、最快的地方,协调好应用获取数据的速度和返回存储数据的速度之差。
二.缓存的应用 2.1 缓存的分类在目前的应用服务框架中,根据应用服务与缓存的耦合程度,一般分为本地缓存(local cache)和远程缓存(distributed cache/shared cache)。
本地缓存存在于应用程序中的存储介质,可以直接访问数据,没有网络开销。
优点:它的存储位置和应用在同一个上下文或者进程中,没有过多的网络开销,访问速度非常快。
缺点:1)每个应用实例需要维护一组缓存数据,不共享;2)数据一致性问题,由于更新不及时,缓存中维护的数据可能不正确;3)无法存储大数据,应用重启时数据丢失,没有持久化。
应用场景:1)缓存的数据一般是不经常变化的静态只读数据;2)短时间内改变对业务影响不敏感的数据;
本地缓存的实现:
脱离了应用,缓存本身就是一个应用,比如美团的Redis、Memcached、Cellar,都属于共享缓存或者共享缓存的实现。
优点:1)数据共享保证了数据的一致性,各节点通过统一的分布式缓存访问数据,保证了不同节点应用进程的数据一致性;2)数据读写分离,高性能高可用;3)支持大数据量的存储,不受应用进程重启的影响;
缺点:1)数据跨网络传输,性能低于本地缓存。
应用场景:具体场景分析一般适用于数据结构简单、高性能读写、分布式共享的数据存储。
2.2 常见框架组件对缓存的应用 2.2.1 MyBatis的缓存 一级缓存