架构设计(三):引入缓存
架构设计(三):引入缓存
作者:Grey
原文地址:
缓存是一个临时存储区域,如果请求的数据获取代价比较高或者数据的访问频率比较高,则会把响应结果存储在内存中,以便更快速地提供后续请求。
每次加载一个新的网页,都要执行一次或多次数据库调用来获取数据。反复调用数据库会大大影响应用程序的性能。缓存可以缓解这个问题,架构如下
在收到一个请求后,网络服务器首先检查缓存是否有可用的响应。如果有它有,它就把数据发回给客户。如果没有,它就查询数据库,将响应存储在缓存,并将其发回给客户端。这种缓存策略被称为"读过式缓存"。根据数据的类型、大小和访问模式,还有其他的缓存策略。与缓存的交互也很简单,因为大多数缓存中间件都提供了适用于普通编程语言的 API。
缓存层是一个临时数据存储层,比数据库快得多。有一个独立的缓存层的好处有如下几点
-
更好的系统性能,减少数据库工作负载。
-
缓存层也可以做独立的扩展(集群)。
使用缓存的考虑因素如下
-
当要访问的数据经常被读取但不经常被修改时,可以考虑使用缓存,因为缓存的数据存储在易失性内存中,所以缓存服务器并不是持久保存数据的理想选择。如果缓存服务器重新启动,内存中的所有数据都会丢失。因此,重要的数据应该保存在持久性数据存储中。
-
过期策略。为缓存设置过期策略是缓存使用的最佳实践。一旦缓存的数据过期,它就会从缓存中删除。当没有过期策略时,缓存的数据将被永久地保存在内存中。建议不要把过期日期定得太短,因为这将导致系统过于频繁地从数据库中重新加载数据;同时,建议不要使过期日期太长,因为数据会变得陈旧。
-
缓存一致性。这就涉及到保持数据存储和缓存的数据同步。因为对数据存储和缓存的数据修改操作不在一个事务中。当跨区域扩展时,保持数据存储和缓存之间的一致性是一个挑战。
-
单点故障预防。如果使用单个缓存服务器,这就可能会导致潜在的单点故障,单点故障(SPOF)是一个系统的一部分,如果它发生故障,将使整个系统停止工作,因此,建议在不同的数据中心设置多个缓存服务器以避免SPOF。可以参考架构设计(一):从单服务器模式到负载均衡设计,另一个推荐的方法是按一定的百分比超额配置所需的内存,这可以在内存使用量增加时提供一个缓冲。
-
驱逐策略。一旦缓存已满,任何向缓存添加项目的请求都可能导致现有项目被删除。这就是所谓的缓冲区驱逐。最小最近使用(LRU)是最流行的缓冲区驱逐策略。还有其他的驱逐策略,如最不常使用(LFU)或先进先出(FIFO)。
参考资料#
作者:GreyZeng
出处:https://www.cnblogs.com/greyzeng/p/16986035.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
你可以在这里自定义其他内容
本文来自博客园,作者:Grey Zeng,转载请注明原文链接:https://www.cnblogs.com/greyzeng/p/16986035.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
2020-12-15 MySQL 数据库的备份与恢复
2015-12-15 Github教程(1)