当前位置: 首页 > news >正文

高性能架构模式——高性能缓存架构

目录

    • 一、引入前提
    • 二、缓存架构的设计要点
      • 2.1、缓存穿透
        • 2.1.1、缓存穿透第一种情况:存储数据不存在
        • 2.1.2、缓存穿透第二种情况:缓存数据生成耗费大量时间或者资源
      • 2.2、缓存雪崩
        • 2.2.1、解决缓存雪崩的第一种方法:更新锁机制
        • 2.2.2、解决缓存雪崩的第二种方法:后台更新机制
      • 2.3、缓存热点
        • 2.3.1、缓存热点的解决方法
    • 三、缓存架构的实现方式

本文来源:极客时间vip课程笔记

一、引入前提

  • 虽然我们可以通过各种手段来提升存储系统的性能,但在某些复杂的业务场景下,单纯依靠存储系统的性能提升不够的,典型的场景有:

  • 经过复杂运算后得出的数据,存储系统无能为力

    例如,一个论坛需要在首页展示当前有多少用户同时在线,如果使用 MySQL 来存储当前用户状态,则每次获取这个总数都要“count(*)”大量数据,这样的操作无论怎么优化 MySQL,性能都不会太高。如果要实时展示用户同时在线数,则 MySQL 性能无法支撑。

  • 读多写少的数据,存储系统有心无力

    例如,一个明星发一条微博,可能几千万人来浏览。如果使用 MySQL 来存储微博,用户写微博只有一条 insert 语句,但每个用户浏览时都要 select 一次,即使有索引,几千万条 select 语句对 MySQL 数据库的压力也会非常大

  • 缓存就是为了弥补存储系统在这些复杂业务场景下的不足,其基本原理是将可能重复使用的数据放到内存中,一次生成、多次使用,避免每次使用都去访问存储系统。

  • 缓存能够带来性能的大幅提升,以 Memcache 为例,单台 Memcache 服务器简单的 key-value 查询能够达到 TPS 50000 以上,其基本的架构是:
    在这里插入图片描述

  • 缓存虽然能够大大减轻存储系统的压力,但同时也给架构引入了更多复杂性。架构设计时如果没有针对缓存的复杂性进行处理,某些场景下甚至会导致整个系统崩溃。

二、缓存架构的设计要点

2.1、缓存穿透

  • 缓存穿透
http://www.lryc.cn/news/590434.html

相关文章:

  • sqli-labs靶场通关笔记:第23关 注释符过滤
  • 二、CV_AlexNet
  • 81、面向服务开发方法
  • 关于SaaS业务模式及其系统架构构建的详细解析
  • 横向移动(下)
  • IPD-流程设计-TE角色说明书参考模板
  • 多维傅里叶变换性质与计算
  • CSS3动画基本使用——页面一打开盒子就从左边走向右边
  • 【尝试】本地部署openai-whisper,通过 http请求识别
  • C++-linux系统编程 11.常见问题与答案
  • 创建SprngBoot项目的四种方式
  • 降本增效利器:汽车制造中EtherCAT转PROFIBUS DP网关应用探析
  • 快速开发汽车充电桩的屏幕驱动与语音提示方案
  • 使用 SeaTunnel 建立从 MySQL 到 Databend 的数据同步管道
  • Mysql系列--1、库的相关操作
  • 在 IntelliJ IDEA 中添加框架支持的解决方案(没有出现Add Framework Support)
  • AI学习笔记三十一:YOLOv8 C++编译测试(OpenVINO)
  • 使用Telegraf从工业物联网设备收集数据的完整指南
  • Beautiful Soup(BS4)
  • ABP VNext + EF Core 二级缓存:提升查询性能
  • AI炒作,AGI或在2080年之前也无法实现,通用人工智能AGI面临幻灭
  • 【RTSP从零实践】13、TCP传输AAC格式RTP包(RTP_over_TCP)的RTSP服务器(附带源码)
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | AutoTextEffect(自动打字机)
  • 使用Whistle自定义接口返回内容:Mock流式JSON数据全解析
  • SQL性能分析
  • C# --- 单例类错误初始化 + 没有释放资源导致线程泄漏
  • 【Linux】如何使用nano创建并编辑一个文件
  • 动态规划题解_打家劫舍【LeetCode】
  • 编译原理第四到五章(知识点学习/期末复习/笔试/面试)
  • 部分排序算法的Java模拟实现(复习向,非0基础)