首页 > 其他分享 >架构设计(三):引入缓存

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

时间:2022-12-15 21:23:39浏览次数:64  
标签:架构设计 存储 缓存 过期 内存 引入 数据

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

作者:Grey

原文地址:

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

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

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

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

img

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

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

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

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

使用缓存的考虑因素如下

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

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

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

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

参考资料

System Design Interview

标签:架构设计,存储,缓存,过期,内存,引入,数据
From: https://www.cnblogs.com/greyzeng/p/16986035.html

相关文章

  • 5分钟了解系统架构设计(2)
    最近梳理了之前学习的架构设计相关的一些课程学习总结,将其整理成了一个大纲脑图,以每篇5分钟系列展现出来,希望对你有所帮助。本篇,我们聚焦架构设计的理解部分。我们会从本......
  • Memcache缓存实现
    Discuz!的Memcache缓存实现前言:在PHP+MySQL架构的站点中,本文重点从MySQL的角度去分析如何使Discuz!论坛(或者类似的PHP+MySQL架构的程序)应对大访问量。同时给出一些使用M......
  • 分片架构设计技巧
    Es集群设计技巧节点可以配置为不同角色,通过选举master实现集群管理Coordinating:协调节点;Master:管理节点;Data:数据存储节点;数据是按照索引分片的,不是按照节点......
  • 手把手系列:如何将小程序游戏引入自有应用?(安卓篇)
    在上一期的手把手系列中为大家分享了:如何在iOS中引入FinClipSDK,并将小程序游戏运行到自有App中。点击查看:......
  • 问题解决系列:IDEA引入@Slf4j使用log变量,编译之后报log cannot be resolved
    问题场景IDEA引入@Slf4j使用log变量,编译之后报logcannotberesolved。本篇博客主要是针对此种情况进行解决。问题环境软件版本JDK1.8问题原因主要会有以下几方面的问题:未......
  • 缓存一致性协议
    一、动画演示。1、​​https://www.scss.tcd.ie/Jeremy.Jones/vivio/caches/MESIHelp.htm​​2、​​https://www.jianshu.com/p/81770751c11c​​########################......
  • 架构设计(二):数据库复制
    架构设计(二):数据库复制作者:Grey原文地址:博客园:架构设计(二):数据库复制CSDN:架构设计(二):数据库复制在架构设计(一):从单服务器模式到负载均衡设计中提到了数据库类型的选择,针......
  • 【系统架构设计师】软考高级职称,一次通过,倾尽所有,【系统架构设计师】备考学习资料
    【系统架构设计师】软考高级职称,一次通过,倾尽所有,看完这篇就够了,学习方法和技巧这里全都有。下文中的网盘连接,可能触发到百度网盘风控规则,导致连接失效,非本人原因,如需要,可以......
  • ListView 加载图片实现三级缓存效果
    importjava.io.FileOutputStream;importjava.io.InputStream;importjava.net.HttpURLConnection;importjava.net.URL;importjava.util.HashMap;importjava.util.Map;i......
  • 分布式锁--redis 缓存实现
    分布式锁目前几乎所有的大型网站及应用都是采用分布式部署的方式,分布式系统开发带来的优点很多,高可用,高并发,水平扩展,分开部署等。但分布式的开发也带来了一些新问题,有的时候......