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

有趣的小知识(三)提升网站速度的秘诀:掌握缓存基础,让你的网站秒开

 像MySql等传统的关系型数据库已经不能适用于所有的业务场景,比如电商系统的秒杀场景,APP首页的访问流量高峰场景,很容易造成关系型数据库的瘫痪,随着缓存技术的出现很好的解决了这个问题。

一、缓存的概念(什么是缓存)

缓存是计算机系统中用于提高数据访问速度的技术。缓存通常是一种高速存储器,用于把访问量较高的热点数据从传统的关系型数据库中加载到内存中,当用户再次访问热点数据时是从内存中加载,减少了对数据库的访问量,解决了高并发场景下容易造成数据库宕机的问题。

缓存工作原理

在缓存中存储数据的副本,当需要访问这些数据时,首先在缓存中查找,如果缓存中有这些数据的副本,则直接从缓存中取出,从而避免了从较慢的主存中读取数据的时间延迟。如果缓存中没有需要的数据,则需要从主存中读取,但读取的数据会被缓存,以便下次访问时更快地获取。

二、为什么要用缓存(为什么要用redis作为缓存)

原因

1.提高访问速度:缓存通常是一种高速存储器,能够更快地访问数据,因为它们通常比主存或者磁盘更接近处理器,可以更快地传输数据,从而可以提高计算机系统的响应速度。

2.减轻负载:缓存可以减轻计算机系统的负载,因为数据不需要每次都从主存或者磁盘读取。如果数据可以从缓存中获取,那么就可以减少系统访问主存或磁盘的次数,从而减少对系统的负载,提高系统的可扩展性。

3.降低能耗:缓存可以降低能耗,因为从缓存中读取数据比从主存或磁盘中读取数据更快,可以更快地完成任务,从而减少了处理器的工作时间,节省了能耗。

4.提高性能:通过使用缓存,可以将热点数据存储在更快的存储器中,从而减少了访问这些数据的时间延迟,提高了计算机系统的性能和效率。

5.高并发场景下:操作缓存能够承受的并发访问量是远远大于访问数据库的,比如redis,它的读的速度是110000次/s,写的速度是81000次/s。所以说将数据库中访问量高的数据存储到缓存中,用户请求的时候直接访问数据库,不必访问数据库,提高应用程序的并发量。

综上所述,使用缓存可以显著提高计算机系统的性能、减轻负载、降低能耗和提高可扩展性。


redis

Redis是一种开源的高性能键值存储系统可以在内存中存储数据,并通过网络访问。Redis支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,而且它提供了丰富的命令,可以对这些数据结构进行灵活的操作。除此之外,Redis还支持事务、持久化、复制、脚本执行、订阅与发布等高级功能。

Redis最初由Salvatore Sanfilippo开发,并且被广泛用于缓存、队列、计数器、排行榜、实时分析等场景。Redis的高性能和灵活性使得它成为流行的解决方案,被广泛应用于Web应用程序、移动应用程序、物联网等领域。同时,Redis的主从复制和集群模式可以扩展到多台服务器上,并具有良好的可扩展性和高可用性。

三、缓存的分类有哪些

根据缓存的位置和作用,可以将缓存分为以下几类:

1.浏览器缓存:浏览器缓存是指浏览器将之前访问过的网页、图片、脚本等资源保存到本地磁盘中,下次访问同样的资源时可以从本地磁盘中读取,从而加快页面加载速度。

2.代理服务器缓存:代理服务器缓存是指代理服务器将之前请求过的资源缓存到本地磁盘或内存中,下次请求同样的资源时可以从本地磁盘或内存中读取,从而减少网络带宽的消耗和请求的响应时间。

3.应用服务器缓存:应用服务器缓存是指应用服务器将之前查询过的数据或计算过的结果缓存到内存中,下次请求同样的数据或计算结果时可以直接从缓存中读取,从而加快响应时间。

4.数据库缓存:数据库缓存是指数据库将之前查询过的数据缓存到内存中,下次查询同样的数据时可以直接从内存中读取,从而加快查询速度。

5.分布式缓存:分布式缓存是指将缓存数据分散到多台服务器上,从而可以扩展缓存的容量和性能,提高缓存的可靠性和可扩展性。

6.本地缓存是指将数据缓存在客户端本地的存储介质中,例如浏览器中的本地存储(Local Storage)、Session Storage、IndexedDB、Web SQL等。本地缓存能够在浏览器关闭后依然保留,也可以在下次用户访问时快速加载。

相对于服务器端的缓存,本地缓存的优点是可以减少服务器端的压力,提高网站或应用程序的性能和响应速度。当用户再次访问同样的页面或数据时,可以直接从本地缓存中读取数据,而不必再次向服务器发送请求。

在Web开发中,本地缓存通常被用于存储一些静态的、不经常变化的数据,例如网站的Logo、样式表、JavaScript库、用户偏好设置等。同时,本地缓存也可以用于离线应用程序的开发,使得应用程序能够在没有网络连接的情况下继续工作,提高用户体验。

需要注意的是,本地缓存虽然能够提高网站或应用程序的性能和响应速度,但是缓存数据可能会过期或失效,因此需要在合适的时机清除缓存数据,以保证数据的正确性和一致性。

7.多级缓存

基于本地缓存和分布式缓存的优缺点,多级缓存应运而生,在实际的业务开发中一般也是采用多级缓存。注意:本地缓存一般存储更新频率低,访问频率高数据,分布式缓存一般存储更新频率很高的数据。

多级缓存的请求流程:本地缓存作为一级缓存,分布式缓存作为二级缓存;当用户获取数据时,先从一级缓存中获取数据,如果一级缓存有数据则返回数据,否则从二级缓存中获取数据。如果二级缓存中有数据则更新一级缓存,然后将数据返回客户端。如果二级缓存没有数据则去数据库查询数据,然后更新二级缓存,接着再更新一级缓存,最后将数据返回给客户端。

以上是常见的缓存分类,不同的缓存类型适用于不同的应用场景,可以根据具体需求选择合适的缓存方案。

 四、通过缓存,提升网站速度

通过缓存可以提升网站的速度和性能,以下是一些常用的缓存技术和方法:

1.浏览器缓存:使用浏览器缓存可以加快网页的加载速度。可以通过设置HTTP响应头的Cache-Control和Expires字段,控制浏览器缓存的时间和内容。对于不经常更新的静态资源,例如图片、样式表、JavaScript库等,可以设置较长的缓存时间,减少浏览器的请求次数。

2.CDN缓存:使用CDN可以将网站的静态资源分布到全球各个节点上,从而加速资源的加载速度。CDN节点会缓存网站的静态资源,当用户访问网站时,会从距离最近的CDN节点获取资源,从而减少网络延迟和带宽消耗。

3.服务器端缓存:使用服务器端缓存可以加速动态内容的生成和响应。可以使用缓存中间件,例如Redis、Memcached等,将计算过的结果缓存到内存中,下次请求时可以直接从缓存中获取数据,从而减少数据库的查询次数和响应时间。

4.数据库查询缓存:对于频繁查询但是不经常更新的数据,例如用户信息、产品信息等,可以使用数据库查询缓存技术,将查询结果缓存到内存中,下次查询同样的数据时可以直接从缓存中获取数据,从而减少数据库的查询次数和响应时间。

5.前端性能优化:对于前端页面,可以采用一些性能优化技巧,例如压缩静态资源、使用CSS Sprite技术、异步加载JavaScript等,从而减小页面的体积和请求次数,加快页面的加载速度。

通过以上缓存技术和方法,可以有效地提升网站的速度和性能,改善用户体验,提高网站的可用性和可靠性。

相关文章:

有趣的小知识(三)提升网站速度的秘诀:掌握缓存基础,让你的网站秒开

像MySql等传统的关系型数据库已经不能适用于所有的业务场景,比如电商系统的秒杀场景,APP首页的访问流量高峰场景,很容易造成关系型数据库的瘫痪,随着缓存技术的出现很好的解决了这个问题。 一、缓存的概念(什么是缓存…...

SpringCloud之服务拆分和实现远程调用案例

服务拆分对单体架构项目来说:简单方便,高度耦合,扩展性差,适合小型项目。而对于分布式架构来说:低耦合,扩展性好,但架构复杂,难度大。微服务就是一种良好的分布式架构方案&#xff1…...

mybatis: Invalid bound statement (not found): com.atguigu.dao.UserDao.save

问题描述: 1 问题实质: dao层(又叫mapper接口)跟mapper.xml文件没有映射 2 问题原因: 出现这种映射问题的原因分为低级原因和更低级原因两种 更低级原因: (1)dao层的方法和mapper.xml中的方法不一样; (2)mapper中的namespace 值 和对应的dao层entity层不一致 &…...

JavaScript 代码规范

所有的 JavaScript 项目适用同一种规范。JavaScript 代码规范代码规范通常包括以下几个方面:变量和函数的命名规则空格,缩进,注释的使用规则。其他常用规范……规范的代码可以更易于阅读与维护。代码规范一般在开发前规定,可以跟你的团队成员…...

6综合项目 旅游网 【6.我的收藏和收藏排行榜】

我的收藏分析先登录→拿到当前登录的用户信息,从数据库中获取uid和对应uid的rid集合→将rid集合信息展示到我的收藏前台代码判断用户是否登录,传递uid,通过uid查找其对应的rid集合当查询的属性涉及到多张表,则必须使用多表连接&am…...

openpnp - error - 微调mark点坐标后,更新板子其他原件其他坐标报错的变通方法

文章目录openpnp - error - 微调mark点坐标后,更新板子其他原件其他坐标报错的变通方法概述想出来一个变通的方法ENDopenpnp - error - 微调mark点坐标后,更新板子其他原件其他坐标报错的变通方法 概述 载入坐标文件后, 指定左下角远点坐标, 然后定位板子上的3个Mark点, 因为…...

借助ChatGPT爆火,股价暴涨又暴跌后,C3.ai仍面临巨大风险

来源:猛兽财经 作者:猛兽财经 C3.ai的股价 作为一家人工智能技术提供商,C3.ai(AI)的股价曾在2021年初随着炒作情绪的增加,达到了历史最高点,但自那以后其股价就下跌了90%,而且炒作情…...

蓝桥杯-数位排序

蓝桥杯-数位排序1、问题描述2、解题思路3、代码实现1、问题描述 小蓝对一个数的数位之和很感兴趣, 今天他要按照数位之和给数排序。当 两个数各个数位之和不同时, 将数位和较小的排在前面, 当数位之和相等时, 将数值小的排在前面。 例如, 2022 排在 409 前面, 因为 2022 的数位…...

【ES实战】ES 插件包离线安装(本地文件)

ES 插件包离线安装(本地文件) 文章目录ES 插件包离线安装(本地文件)使用安装命令安装直接解压式验证安装情况常用的分词插件analysis-ik analysis-pinyin analysis-dynamic-synonym 在集群的节点上分发插件的ZIP安装包 使用安…...

Spring的核心基础——IOC与DI

文章目录一、Spring简介1 Spring介绍1.1 为什么要学1.2 学什么2 初识Spring2.1 Spring家族2.2 Spring发展史3 Spring体系结构3.1 Spring Framework系统架构图4 Spring核心概念问题导入4.1 核心概念二、IOC和DI入门1 IOC入门问题导入1.1 门案例思路分析1.2 实现步骤1.3 实现代码…...

C++正则表达式基础

文章目录1. 查找第一个匹配的2. 查找所有结果3. 打印匹配结果的上下文4. 使用子表达式5. 查找并替换注意: .&#xff08;点&#xff09;在括号中没有特殊含义&#xff0c;无需转义用\转义。 1. 查找第一个匹配的 #include <iostream> #include <regex>using names…...

如何在网络安全中使用人工智能并避免受困于此

人工智能在网络安全中的应用正在迅速增长&#xff0c;并对威胁检测、事件响应、欺诈检测和漏洞管理产生了重大影响。根据Juniper Research的一份报告&#xff0c;预计到2023年&#xff0c;使用人工智能进行欺诈检测和预防将为企业每年节省110亿美元。但是&#xff0c;如何将人工…...

生态 | 人大金仓与超聚变的多个产品完成兼容认证

近日&#xff0c;人大金仓与超聚变数字技术有限公司&#xff08;简称“超聚变”&#xff09;完成了多款产品的兼容互认测试。测试表明&#xff0c;人大金仓KingbaseES V8数据库与超聚变服务器操作系统FusionOS、超聚变FusionOne基础设施完全兼容&#xff0c;人大金仓异构数据同…...

4自由度串联机械臂按颜色分拣物品功能的实现

1. 功能说明 本实验要实现的功能是&#xff1a;将黑、白两种颜色的工件分别放置在传感器上时&#xff0c;机械臂会根据检测到的颜色&#xff0c;将工件搬运至写有相应颜色字样区域。 2. 使用样机 本实验使用的样机为4自由度串联机械臂。 3. 运动功能实现 3.1 电子硬件 在这个…...

玩转结构体---【C语言】

⛩️博主主页&#xff1a;威化小餅干&#x1f4dd;系列专栏&#xff1a;【C语言】藏宝图&#x1f38f; ✨绳锯⽊断&#xff0c;⽔滴⽯穿&#xff01;一个编程爱好者的学习记录!✨目录结构体类型的声明结构体成员访问结构体传参前言我们是否有想过&#xff0c;为什么会有结构体呢…...

c语言指针怎么理解 第二部分

第四&#xff0c;指针有啥用。 比方说&#xff0c;我们有个函数&#xff0c;如下&#xff1a; int add&#xff08;int x){ return (x1); //把输入的值加1并返回结果。 } 好了&#xff0c;应用的时候是这样的&#xff1a; { int a1; aadd(a); //add函数返回的是a1 //现在 a等于…...

GC简介和监控调优

GC简介&#xff1a; GC(Garbage Collection)是java中的垃圾回收机制&#xff0c;是Java与C/C的主要区别之一&#xff0c;在使用JAVA的时候&#xff0c;一般不需要专门编写内存回收和垃圾清理代 码。这是因为在Java虚拟机中&#xff0c;存在自动内存管理和垃圾清扫机制。 什么…...

Understanding The Linux Kernel --- Part2 Memory Addressing

内存寻址 操作系统自身不必完全了解物理内存&#xff0c;如今的微处理器包含的硬件线路使内存管理既高效又健壮&#xff0c;所以编程错误就不会对该程序之外的内存产生非法访问 x86如何进行芯片级内存寻址Linux如何利用寻址硬件 x86 三种不同的地址术语 逻辑地址 逻辑地址…...

前后端分页查询好大的一个坑(已解决)

前言&#xff1a;如果你在做前后端的分页查询&#xff0c;找不到错误&#xff0c;请你来看看是否是和我一样的情况&#xff1f;情况&#xff1a;做了一个前后盾UI的项目&#xff0c;有一个页面是查询系统日志&#xff0c;要进行分页查询&#xff1b;第一页的&#xff1a;第5页的…...

Python批量执行读取ini文件和写入ini文件时,性能比较低怎么办,给出解决方案和源码

Python批量执行读取ini文件和写入ini文件时&#xff0c;性能比较低怎么办&#xff0c;给出解决方案和源码 解决方案&#xff1a; 使用ConfigParser的缓存机制&#xff0c;可以避免频繁读取ini文件造成的性能问题。 将ini文件转换为json格式&#xff0c;使用json库进行读写操作…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...