架构设计(三):引入缓存

架构设计,引入,缓存 · 浏览次数 : 614

小编点评

## Architecture Design (3): Introduction to Caching **Introduction:** Caching is a technique that stores frequently accessed data in a temporary memory area (cache) instead of retrieving it from a slow or expensive source. This can significantly improve application performance by reducing database calls and minimizing latency. **Implementation:** * When a request arrives, the network server checks the cache for an existing response. * If a match is found, the data is sent directly to the client. * If no match is found, the server queries the database and stores the result in the cache for future requests. * This strategy is called "read-through caching" and is suitable for frequently accessed data. **Cache Types and Strategies:** * **By Data Type:** Different data types may require different caching strategies. For example, images typically use a different approach than text. * **By Size:** Large datasets may benefit from cache storage due to their higher access costs. * **By Access Frequency:** Caching strategies may differ based on how often the data is accessed. **Advantages of Caching:** * **Improved Performance:** Reduced database calls, minimizing latency. * **Reduced Database Workload:** Cache acts as a buffer, alleviating database load. * **Simplified Development:** Many caching libraries and frameworks provide convenient APIs. **Considerations:** * **Cache Expiration:** Cache entries are deleted when they expire, typically based on an expiry date. * **Missing or Outdated Data:** Proper handling of missing or outdated data is crucial. * **Data Consistency:** Maintaining data consistency between the cache and underlying data store is important. **Conclusion:** Caching is a valuable technique for improving application performance by reducing database calls and optimizing data access. By understanding the different cache types and strategies, developers can implement a robust caching system that meets their specific requirements.

正文

架构设计(三):引入缓存

作者:Grey

原文地址:

博客园:架构设计(三):引入缓存

CSDN:架构设计(三):引入缓存

缓存是一个临时存储区域,如果请求的数据获取代价比较高或者数据的访问频率比较高,则会把响应结果存储在内存中,以便更快速地提供后续请求。

每次加载一个新的网页,都要执行一次或多次数据库调用来获取数据。反复调用数据库会大大影响应用程序的性能。缓存可以缓解这个问题,架构如下

img

在收到一个请求后,网络服务器首先检查缓存是否有可用的响应。如果有它有,它就把数据发回给客户。如果没有,它就查询数据库,将响应存储在缓存,并将其发回给客户端。这种缓存策略被称为"读过式缓存"。根据数据的类型、大小和访问模式,还有其他的缓存策略。与缓存的交互也很简单,因为大多数缓存中间件都提供了适用于普通编程语言的 API。

缓存层是一个临时数据存储层,比数据库快得多。有一个独立的缓存层的好处有如下几点

  1. 更好的系统性能,减少数据库工作负载。

  2. 缓存层也可以做独立的扩展(集群)。

使用缓存的考虑因素如下

  • 当要访问的数据经常被读取但不经常被修改时,可以考虑使用缓存,因为缓存的数据存储在易失性内存中,所以缓存服务器并不是持久保存数据的理想选择。如果缓存服务器重新启动,内存中的所有数据都会丢失。因此,重要的数据应该保存在持久性数据存储中。

  • 过期策略。为缓存设置过期策略是缓存使用的最佳实践。一旦缓存的数据过期,它就会从缓存中删除。当没有过期策略时,缓存的数据将被永久地保存在内存中。建议不要把过期日期定得太短,因为这将导致系统过于频繁地从数据库中重新加载数据;同时,建议不要使过期日期太长,因为数据会变得陈旧。

  • 缓存一致性。这就涉及到保持数据存储和缓存的数据同步。因为对数据存储和缓存的数据修改操作不在一个事务中。当跨区域扩展时,保持数据存储和缓存之间的一致性是一个挑战。

  • 单点故障预防。如果使用单个缓存服务器,这就可能会导致潜在的单点故障,单点故障(SPOF)是一个系统的一部分,如果它发生故障,将使整个系统停止工作,因此,建议在不同的数据中心设置多个缓存服务器以避免SPOF。可以参考架构设计(一):从单服务器模式到负载均衡设计,另一个推荐的方法是按一定的百分比超额配置所需的内存,这可以在内存使用量增加时提供一个缓冲。

  • 驱逐策略。一旦缓存已满,任何向缓存添加项目的请求都可能导致现有项目被删除。这就是所谓的缓冲区驱逐。最小最近使用(LRU)是最流行的缓冲区驱逐策略。还有其他的驱逐策略,如最不常使用(LFU)或先进先出(FIFO)。

参考资料

System Design Interview

与架构设计(三):引入缓存相似的内容:

架构设计(三):引入缓存

架构设计(三):引入缓存 作者:Grey 原文地址: 博客园:架构设计(三):引入缓存 CSDN:架构设计(三):引入缓存 缓存是一个临时存储区域,如果请求的数据获取代价比较高或者数据的访问频率比较高,则会把响应结果存储在内存中,以便更快速地提供后续请求。 每次加载一个新的网页,都要执行一次或多次数

架构设计(六):引入消息队列

架构设计(六):引入消息队列 作者:Grey 原文地址: 博客园:架构设计(六):引入消息队列 CSDN:架构设计(六):引入消息队列 消息队列是一个支持持久化的组件,数据存储在内存中,支持异步通信。它作为一个缓冲器,分配异步请求。消息队列的基本架构很简单,包含两个部分 第一部分:输入服务,称为生产

Dubbo架构设计与源码解析(三)责任链模式

作者:周可强 一、责任链模式简介 1、责任链模式定义 责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。

大模型重塑软件开发,华为云AI原生应用架构设计与实践分享

在ArchSummit全球架构师峰会2024上,华为云aPaaS平台首席架构师马会彬受邀出席,和技术爱好者分享AI原生应用引擎的架构与实践。

[转帖]后台性能优化实践实战

近年来公司的业务数据量和用户流量都呈现出了非常迅猛的增长趋势,为了解决历史架构设计中的不足,应对诸多因素引发的风险并保证通天塔平台的稳定运行,通天塔后端组专项成立了一个“通天塔后端技术优化组”,号召并鼓励团队每个人积极参与进来,全盘分析和梳理、技术设计和技术Review、形成技术优化需求、排期、自测

交易日均千万订单的存储架构设计与实践

服务业务线:快递、快运、中小件、大件、冷链、国际、B2B合同物流、CLPS、京喜、三入三出(采购入、退货入、调拨入、销售出、退供出、调拨出)等

[转帖]浅谈系统稳定性与高可用保障的几种思路

https://segmentfault.com/u/dewujishu 一、前言 高并发、高可用、高性能被称为互联网三高架构,这三者都是工程师和架构师在系统架构设计中必须考虑的因素之一。今天我们就来聊一聊三H中的高可用,也是我们常说的系统稳定性。 本篇文章只聊思路,没有太多的深入细节。阅读全文大概

文心一言 VS 讯飞星火 VS chatgpt (112)-- 算法导论10.2 3题

三、用go语言,用一个单链表L实现一个队列。要求操作 ENQUEUE 和 DEQUEUE 的运行时间仍为O(1)。 文心一言: 在 Go 语言中,使用单链表实现队列的操作,包括入队(ENQUEUE)和出队(DEQUEUE),并保持操作的时间复杂度为 O(1),需要利用两个指针,一个指向队头,另一个指

文心一言 VS 讯飞星火 VS chatgpt (105)-- 算法导论10.1 3题

三、用go语言,仿照图 10-2,画图表示依次执行操作 ENQUEUE(Q,4)、ENQUEUE(Q,1)、ENQUEUE(Q,3)、DEQUEUE(Q)、ENQUEUE(Q,8)和 DEQUEUE(Q)每一步的结果,队列初始为空,存储于数组 Q[1..6]中。 文心一言: 在这个问题中,我们尝试使

实践篇(三):如何有效评审软件架构图?

设计意图的传达是架构可视化关注的重要维度,在技术方案评审过程中不可避免的会出现各种各样的架构图或设计图,这些图形化表述在设计意图传达效果层面表现不一,本文从图形化的视角为软件架构图的评审关注点提供了参考。