架构设计(三):引入缓存
架构设计,引入,缓存
·
浏览次数 : 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:架构设计(三):引入缓存
缓存是一个临时存储区域,如果请求的数据获取代价比较高或者数据的访问频率比较高,则会把响应结果存储在内存中,以便更快速地提供后续请求。
每次加载一个新的网页,都要执行一次或多次数据库调用来获取数据。反复调用数据库会大大影响应用程序的性能。缓存可以缓解这个问题,架构如下
在收到一个请求后,网络服务器首先检查缓存是否有可用的响应。如果有它有,它就把数据发回给客户。如果没有,它就查询数据库,将响应存储在缓存,并将其发回给客户端。这种缓存策略被称为"读过式缓存"。根据数据的类型、大小和访问模式,还有其他的缓存策略。与缓存的交互也很简单,因为大多数缓存中间件都提供了适用于普通编程语言的 API。
缓存层是一个临时数据存储层,比数据库快得多。有一个独立的缓存层的好处有如下几点
-
更好的系统性能,减少数据库工作负载。
-
缓存层也可以做独立的扩展(集群)。
使用缓存的考虑因素如下
-
当要访问的数据经常被读取但不经常被修改时,可以考虑使用缓存,因为缓存的数据存储在易失性内存中,所以缓存服务器并不是持久保存数据的理想选择。如果缓存服务器重新启动,内存中的所有数据都会丢失。因此,重要的数据应该保存在持久性数据存储中。
-
过期策略。为缓存设置过期策略是缓存使用的最佳实践。一旦缓存的数据过期,它就会从缓存中删除。当没有过期策略时,缓存的数据将被永久地保存在内存中。建议不要把过期日期定得太短,因为这将导致系统过于频繁地从数据库中重新加载数据;同时,建议不要使过期日期太长,因为数据会变得陈旧。
-
缓存一致性。这就涉及到保持数据存储和缓存的数据同步。因为对数据存储和缓存的数据修改操作不在一个事务中。当跨区域扩展时,保持数据存储和缓存之间的一致性是一个挑战。
-
单点故障预防。如果使用单个缓存服务器,这就可能会导致潜在的单点故障,单点故障(SPOF)是一个系统的一部分,如果它发生故障,将使整个系统停止工作,因此,建议在不同的数据中心设置多个缓存服务器以避免SPOF。可以参考架构设计(一):从单服务器模式到负载均衡设计,另一个推荐的方法是按一定的百分比超额配置所需的内存,这可以在内存使用量增加时提供一个缓冲。
-
驱逐策略。一旦缓存已满,任何向缓存添加项目的请求都可能导致现有项目被删除。这就是所谓的缓冲区驱逐。最小最近使用(LRU)是最流行的缓冲区驱逐策略。还有其他的驱逐策略,如最不常使用(LFU)或先进先出(FIFO)。
参考资料
System Design Interview
与架构设计(三):引入缓存相似的内容: