缓存的含义
缓存会在内存中保留可重用的常用数据副本,这样应用程序就能避免重复的数据库调用,并更快返回结果。
缓存会在内存中保留可重用的常用数据副本,这样应用程序就能避免重复的数据库调用,并更快返回结果。
缓存是将键值数据存储在内存(例如非相关结构化查询语言 (NoSQL) 数据库)中的做法,因此应用程序可以比从传统存储更快地检索键值数据。在云存储体系结构中(请求通常跨网络和触摸共享服务)中,缓存可帮助减少响应时间并减少重复工作。
大多数系统为完整数据集保留持久的“事实源”(数据库),然后为经常读取的临时子集保留缓存。收到请求时,应用会先检查缓存;如果数据已存在,就会直接快速返回,而不会再次查询后端。开发者还会缓存处理后的数据,并重复使用该数据,以便比标准查询更快地为关系数据库、SQL 数据库或开源 PostgreSQL 数据库提供请求响应。
合适的候选数据包括经常读取且变化不频繁的数据(例如产品和定价信息,或构建成本较高的共享静态资源)。
如果某个操作会转换数据或执行复杂计算,那么缓存结果可以避免对后续请求重复计算。
开发者根据需要使用多层缓存(“缓存层”)将不同类型的数据存储在单独的缓存中。添加一个或多个缓存层可以提升数据层的吞吐量和延迟性能。
内存存储常用于短时间保存大量会话数据,例如用户输入、购物车条目或个性化首选项。对于有状态应用,团队还会将会话状态存储在缓存中,这样应用就可以保持无状态。
缓存可以通过几种具体方式提升性能:
某些系统会使用多级缓存(“缓存层”),让不同类型的数据根据需求存放在不同的缓存中。添加一个或多个缓存层可以提升数据层的吞吐量和延迟性能,并通过减少后端负载降低整体成本。
团队通常会缓存以下几类数据:
应用可通过多种标准方式从缓存读取和写入缓存。以下是一些最常见的模式及其在实践中的含义。
使用缓存层可以通过从缓存中提供常见请求,而不是反复查询后端存储,提高吞吐量并降低延迟。这可以降低扩展数据库基础结构的需求,因为一开始到达数据库的请求更少。
对于使用量会激增的应用,内存缓存可以通过让频繁请求的数据靠近使用位置来帮助缓解延迟。
选择工作流时,可以先从以下方面入手:
缓存可以提升应用程序性能,因为从内存缓存读取比从磁盘驱动的数据存储读取更快。当更多请求由缓存提供时,系统发送到后端数据库的查询更少,这可以降低扩展数据库基础结构的需求,并减少相关成本。
缓存有助于减少重复工作。重复读取的数据 - 或者构建成本很高的数据 - 可以只存储一次并重复使用。如果某个操作会执行复杂计算或转换数据,缓存结果可以减少对后续请求的重复计算。
许多网站会缓存页面输出(例如 HTML 和客户端脚本),这样服务器就可以返回缓存的输出,而不是每次都重新运行页面代码。缓存还通过 Web 缓存和网络缓存支持 Web 多媒体场景,例如内容分发网络 (CDN)。
应用通常会将数据的临时子集存储在缓存中,以便快速检索,而主数据库保留完整且持久的数据集。缓存经过处理的数据并重复使用,可比标准数据库查询更快地响应请求。
团队通常会添加一个或多个缓存层来提升吞吐量和延迟性能,通过缓存提供常见查询并减少数据库负载。当使用量激增且吞吐量需求上升时,内存缓存可以帮助缓解这些时段的延迟。
缓存通常用于在内存存储中保存大量短期会话数据(例如用户输入或个性化首选项)。有些团队还会将会话状态存储在缓存中,这样有状态应用便可使应用层保持无状态。对于运营系统,变化不频繁的数据(例如产品和定价信息)是常见的缓存目标。
浏览器缓存会将静态资源的副本存储在用户设备上,这样再次访问时就可以重复使用这些文件,而无需重新下载。
服务器端缓存发生在远程运行业务服务的进程中,而不是在最终用户的设备上。服务器端缓存通常是私有的(仅限一个应用实例本地)或共享的(供多个应用实例使用)。
CDN 会在更靠近最终用户的边缘服务器上缓存内容,这样请求就不必总是回传到源位置。与浏览器缓存(单个用户)不同,CDN 缓存是共享的 - 一位用户的请求可以填充内容,供另一位用户稍后接收。
缓存不仅是一种云计算模式,硬件和内存层也使用该功能。
CPU 缓存是处理器附近(或位于处理器上的)的小型快速内存区域,用于存储常用数据和指令的副本,从而减少等待主内存的时间。
内存(内存中)缓存是最简单的软件缓存类型:它是保存在单个进程地址空间中的内存中存储,并由该进程直接访问。
分布式缓存跨多个服务器,因此缓存容量和事务处理能力都能超出单台计算机。许多共享缓存服务会使用服务器群集,并在群集中分发缓存数据;扩展缓存可以像添加更多服务器一样简单。一些分布式设计还会对缓存进行分层,当某一层没有请求数据时,会从上游提供程序获取数据,然后将结果本地存储供下次请求使用。
缓存可将频繁访问的数据放在更接近使用位置的地方,从而缩短响应时间,并帮助系统处理更多并发请求。它还可以减少原始数据存储中的争用,例如数据库连接数有限时。
在分布式应用程序中,缓存通常会出现在多个位置 - 客户端(例如浏览器)和服务器端(在应用程序或共享缓存服务中)。
从小处着手,专注于能带来最明显回报的数据: