细说缓存在大型网站架构中的应用

news/2024/5/12 15:40:41/文章来源:https://blog.csdn.net/dinglang_2009/article/details/53355340

缓存的基本知识

在整个计算机体系构造中(无论是硬件层面还是软件层面),缓存都是无处不在的。

在计算机硬件构造中,由于两种介质的速度不匹配,高速介质在和低速介质交互时速度趋向低速方,这就导致了高速介质的资源闲置。而通过引入第三种介质(速度和成本介于两者中间),将低速方读写的部分内容数据保存在该介质中,高速方大多数情况下则无需和低速方直接交互,这样就能整体提升了交互的性能。这就是计算机体系中缓存的由来。比较典型的就是CPU缓存(CPU寄存器=>L1 cahce =>L2 cache =>内存=>硬盘),如图:

 

在计算机系统和应用软件层面,缓存更是无处不在。我们在使用浏览器上网时,很多静态资源会被缓存到本地。我们在手机上采用微信聊天时,很多好友的头像等数据会被缓存到手机中。在操作系统层面,I/O操作也会被内核缓存(一般将数据缓存在文件系统的缓存页中),当然,这个可能相比前两个场景更加抽象,但缓存的目的都是一致的,为了提升读写性能。

 

缓存在狭义上解决介质读写速度不匹配问题,广义上包括任何利用中间媒介提高速度的方法,包括:空间换时间,动态操作变为静态操作。

 

缓存(CACHE)和缓冲(BUFFER

缓存:可以共享,多种数据,大小不固定,可以重复使用,已知数据,用于提高IO效率。

缓冲:不可以共享,单一数据,大小固定,读取后失效,命中100%,未知数据,用于减少IO次数。

缓存的属性

命中率:从缓存中返回正确数据的次数/总请求次数。

容量:超过这个值启用一定的策略:转移到磁盘;转移到远端;清空部分。

存储介质:内存、磁盘。

成本:开发成本、部署成本、硬件成本。

效率:SET效率、GET效率、序列化、哈希算法、分布式算法。

缓存的限制

由于价格的因素,缓存实现依赖的存储往往有大小限制——保存什么,舍弃什么,命中率。

缓存往往是从无到有的——在最初阶段不能发挥作用,在不命中的时候性能颠簸。

 

缓存的分类

按照存储介质来分

内存(网站进程内、同服务器独立进程、独立服务器、分布式服务器组)。

磁盘(本地文件和数据库,独立服务器、分布式服务器组)。

缓存可以使用磁盘而不仅仅是内存。

按照存储的数据来分

直接用于输出的整页(HTML、脚本样式、图片)。

片段页(可供多个客户端使用的HTML、脚本样式等)。

索引和聚合数据(空间换时间)。

耗时查询的结果数据。

和业务相关的大块数据(列表数据,引用数据)。

和业务相关的小级数据(行级数据,资源数据)。

和上下文(用户)相关的数据(活动数据)。

按照实现方式来分

框架或引擎内置的缓存(比如ORM缓存和SQL SERVER缓存)。

安装特定的组件根据规则自动实现缓存(比如反向代理和输出缓存)。

需要由开发以编程方式实现的缓存(比如业务数据缓存)。

按照作用来分

用于数据的读取(之后介绍的大部分内容都是基于此类缓存)

用于(允许丢失)数据的写入——写到缓存的队列中,再由工作线程提交处理(写入存储)

 

网站架构中的缓存

浏览器缓存(HTTP缓存头)

代理缓存(Squid Vanish CDN

Web服务器缓存(内核缓存、应用缓存)

页面输出缓存(片段缓存、整页缓存)

业务数据缓存(本地缓存,分布式缓存)

其它缓存(ORM、数据库、搜索引擎等缓存)

 

缓存的常见模式和策略(过期、更新、清除)

缓存的常见模式:

 

缓存的策略:

缓存的更新策略

A 由获取数据请求触发的被动更新

B 由更新数据请求触发的主动更新(双写)

C 使用独立线程主动定时更新缓存

D 回调方式更新(过期或依赖)

E 永远不更新?

  

缓存的过期(失效)策略

F 绝对的过期时间

G 平滑过期(有人使用就不会过期)

H 依赖方式(依赖数据库、依赖文件)

I 永远不过期?

缓存的清除(替换)策略:

RAND 删除随机数据,不能反映局部性。

SIZE 删除最大的数据。

FIFOFirst In First Out 删除最先进入缓存的数据,不能反映局部性。

LFULeast Frequently Used 删除一直以来最少被使用的数据。

LRULeast Recently Used 删除最近最少使用的数据。

常见模式

延迟加载方式:A+F

预加载方式:B/C/E+I

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_717109.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net 调用其它网站第一次总是访问失败_大型网站核心架构之高可用(四)

网站可用性的度量与考核网站可用性度量 网站不可用也被称作网站故障,业界通常用多少个9来衡量网站的可用性,比如QQ的可用性是4个9,即QQ服务99.99%可用,这意味着QQ服务要保证其在所有的运行时间中,只有0.01%的时间不可用…

c++怎么从主网页中读取子网站_如何用C++写一个网站

1.前言用各种语言写过一些网站之后,我不禁开始好奇,C能不能写网站呢,实际上想到这个问题的时候,我就大致有了答案。本文中我们将尝试用C写一个简单的网站,探索一些细节性的问题,并报告用C写网站的体验如何。…

基于Springboot的大学生招聘网站系统

1.项目简介 1.1 系统研究背景 伴随着中国经济的飞速发展,城市化进程的加快,求职者队伍的不断壮大,传统人才招聘的弊端初露端倪。首先,传统人才应聘的形式是求职者和企业的负责人面对面地交流。这就需要企业和求职者提前规划自己…

Springboot+vue项目体用用品销售商城网站

摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,体用用品销售商城网站当然也不能排除在外。体用用品销售商城网站是以实际运用为开发背景,运用软件工程原理…

Springboot+vue项目点餐平台网站

文末获取源码 开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:springbootvue JDK版本:jdk1.8 本系统主要实现了管理员:首页、个人中心、用户管理、菜品分类管理、菜品信息管理、菜品评价管理…

Springboot+vue项目音乐网站与分享平台

文末获取源码 开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:springbootvue JDK版本:jdk1.8 音乐网站与分享平台的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中…

Springboot+vue前后端分离的租房网站

开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:springbootvue JDK版本:jdk1.8 本系统有管理员;首页、个人中心、用户管理、房屋类型管理、房屋信息管理、预约看房管理、在线签约管理、租赁…

SpringBoot+vue实现前后端分离的宠物销售商城网站

开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 使用框架:springbootvue JDK版本:jdk1.8 本选题则旨在通过标签分类管理等方式,实现管理员:首页、个人中心、用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理…

SpringBoot+vue实现前后端分离的垃圾分类网站系统

文末获取源码 开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 使用框架:springbootvue JDK版本:jdk1.8 本论文主要论述了如何使用JAVA语言开发一个垃圾分类网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S…

SpringMVC+Vue项目旅游资源网站

末获取源码 开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架ssmvue JDK版本:jdk1.8 前言介绍 旅游资源网站的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管…

SpringMVC+Vue项目中国风音乐推介网站

末获取源码 开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架ssmvue JDK版本:jdk1.8 前言介绍 近年来,随着我国经济的不断发展,平台的管理制度越来越多。每个音乐推介网站也都将通过计…

SpringMVC+Vue实现前后端的志愿者招募网站

末获取源码 开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架ssmvue JDK版本:jdk1.8 前言介绍 志愿者招募的需求和管理上的不断提升,志愿者招募网站的潜力将无限扩大,志愿者招募网站在…

SpringBoot+Vue项目漫画网站

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…

SpringBoot+Vue+Element-UI实现校园新闻网站

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…

SSM+Vue+Element-UI实现移动电商网站

文末获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器&am…

Java毕设项目——人才招聘网站(java+SpringBoot+Maven+Mysql+Jsp)

文末获取源码 开发语言:Java 框架:SpringBoot 技术:Jsp JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包&…

SpringBoot+Vue实现前后端分离的旅游推荐网站

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JD…

mysql5.7.18压缩包下载_【云服务器Centos7.x建站】MySQL 5.7安装、使用、错误总结

MySQL环境搭建进入本机源文件目录 cd /usr/local/src wget下载yum源的rpm包 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 安装rpm包 rpm -ivh mysql57-community-release-el7-11.noarch.rpm 使用yum安装mysql-server yum install -y mysql-se…

获取php网站源码安卓,Windows下获取Android 源码的实例教程

本篇文章是对在Windows下获取Android 源码的方法进行了详细的分析介绍,需要的朋友参考下前言:略!获取源码的原因千千万~~~1.安装GIT工具。GIT是林纳斯托瓦兹大神为了管理器Linux内核开发而创立的分布式版本控制软件。下载地址:cod…

一个网站只能用一个服务器吗,Web服务器只能持有一个网站吗? | MOS86

当您第一次开始学习域名,IP地址,Web服务器和网站是否适合并共同合作时,有时候会有点混乱或压倒一切。这一切如何顺利开展工作?今天今天的问题照片由Rosmarie Voegtli(Flickr)提供。问题SuperUser reader user3407319想知道网络服务…