SpringCloud-高级篇(十四)

缓存的作用是其实就是为了减轻对数据库的压力,缩短服务响应的时间,从而提高整个服务的并发能力,Redis单节点并发其实已经很高了,但是它依然有自己的上限,随着互联网的发展,用户低量越来越大,想淘宝、京东、12306这样的网站,它们的并发量,往往能达到亿级一上的并发量,这个时候仅仅使用Redis是不能够满足高的并发需求的。

下面学习的多级缓存正是为了应对亿级流量的并发

(1)多级缓存的架构

浏览器可以把服务器返回的静态资源缓存在本地的,下次再去访问静态资源的时候服务器只要检查一下,数据有没有变化,没有变化返回304状态码,不用返回数据了,浏览器看返回的是304说明本地有,直接把本地的数据渲染,用户直接可以看到,这样就可以减少数据的传输,从而提高渲染和响应的速度。对于一个页面来讲90%的请求都是静态资源请求都可以被缓存起来,那么这样来看响应速度就大大提升了,这就是第一级缓存

对于非静态的数据,不得不访问服务器端了,请求到达了nginx,原来nginx服务器是做反向代理的,在这里要形成第二级的缓存(nginx本地缓存),nginx也是可以去做编程的,想tomcat一样做业务逻辑的编写,我们可以把数据缓存在nginx本地,用户请求来了之后呢,我想看本地有没有呢,有的话直接返回,请求都不到tomcat,响应速度就会快很多

如果没有直接查Redis,注意Redis以前是在tomcat后查现在是在Nginx查,压根不需要到tomcat,tomacat压力就大大减轻了,查Redis就形成了第三级缓存,Redis命中了直接返回,未命中采用到达tomcat

到tomcat以后,不是直接访问数据库的,会形成第四级缓存,叫做tomcat进程缓存,会在服务器的内部类似map(更高级的东西)的形式形成一个进程缓存,这样的缓存呢保存在tomat本地,请求到达以后呢先去读本地缓存,进程缓存啊,命中了直接就返回了,也就不会去访问数据库了,可以解决之前的一个问题,当Redis缓存失效时它就不会直接打到数据库了,它会先到tomcat读本地进程缓存,而后在没命中的情况下,才会到达数据

通过层层的缓存,解决了之前的两个问题了请求大多数情况下都由nginx处理了,不会tomcat,tomcat压力大大减轻了,tomcat就不会称为整个服务器的瓶颈了。第二个当Redis缓存失效时,还会有tomcat进程缓存,做一个缓冲,从而不会直接打到数据库,避免了对数据库的冲击,前面有好几层缓存,压力都集中到了nginx,我们需要在nginx内部去实现对Redis的访问,对tomcat的访问等等的业务编写,此时他就不是一个反向代理服务器了,就变成一个真正的Web服务了在里面去写业务逻辑了将来nginx将来要部署成一个集群,去应对更高的一个并发,准备一个单独的nginx,做反向代理,请求先到它,然后再反向代理到多个本地的本地缓存编写业务的nginx服务器,然后再往后去访问Redis,tomcat按照这样的流程去走,当然Redis也好,tomacat,Mysql也都可以去做群,这样呢多级缓存完整架构方案

 

我们需要在tomcat内部去学习编写进程缓存,称为JVM进程缓存

需要在nginx内部做编程,需要学习一门新的语言Lua,学习会了之后,就可以去实现nginx本地缓存,Redis缓存,tomcat缓存等等的多级缓存方案

最后数据库需要跟缓存做同步,就是缓存同步策略

(2)JVM进程缓存

这里主要实现多级缓存中的tomcat进程缓存部分,在tomcat内部去添加缓存,业务进来以后呢优先查进程缓存,缓存没有命中在去查数据库 

(1)导入商品案例

 

重启mysql:

 

 

查询商品: 

查询库存: 

将来的查询接口是要加缓存业务的

这个nginx是Windows版本的 

item.html就是商品查询页 

页面中的数据是写死的,将来想要去服务器中查询

1001这个发送的请求没有加端口,默认请求到80端口了,到了反向代理服务器 

 

nginx.conf配置反向代理 

(2)初识Caffeine

我们下面可以给商品查询添加缓存了,我们添加的是JVM的本地缓存,我们先了解一下进程的缓存跟传统的分布式缓存之间的差异,了解一个缓存技术Caffeine

        

一直往缓存中存入数据是不行的需要一种清除策略 

驱逐需要时间,运行完jvm就退出了 

前面的key就被清理了 

(3)实现进程缓存

创建缓存对象 

在Controller中注入缓存对象:

改: 

查商品 

产生日志,第一次查询走的数据库  

清空日志: 

重新刷新一次浏览器:没有日志,则证明这次查询没有走数据库,走了缓存

查库存:

产生日志,第一次查询走的数据库 

刷新页面:没有日志,走的缓存

第一次查询走的是数据库,把数据库放到缓存中,第二次直接走缓存,不再查询数据库了,则证明JVM进程缓存就实现了

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

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

相关文章

51单片机原理及应用张毅刚版课后习题以及答案

AT89S51单片机内部集成了哪些外围功能部件 ①8位微处理器CPU ②数据存储器 128B RAM ③程序存储器 ④4个8位可编程并行I/O口 ⑤1个全双工的异步串行口 ⑥2个可编程的16位定时器/计数器 ⑦1个看门狗定时器WDT ⑧中断系统具有五个中断源 五个中断向量 ⑨特殊功能寄存器SFR 26个…

vulnhub靶机BlueSky

下载地址:BlueSky: 1 ~ VulnHub 主机发现 目标177 端口扫描 服务扫描 漏洞扫描 看web就不用我多说了吧 默认页面,爆破吧 这个也没有扫出来 有manger/html但是没有任何返回值 应该是限制本地访问或者禁掉了 网上直接用struts2-showcase这个洞了 cve-20…

智能AI写作到底怎么样?这几款AI写作非常好用

近年来,人工智能(AI)技术的快速发展已经渗透到各个领域,包括写作领域。AI写作软件通过模仿指定作家的风格和语言,能够生成高质量的文章。这种技术的出现引发了广泛的讨论和争议。本文将探讨AI写作的优点,并…

flutter获取地理定位:geolocator依赖详细用法

本文使用geolocator插件实现app物理定位功能。 该插件的主要功能有: 获取最后已知位置;获取设备当前位置;获取连续的位置更新;检查设备是否启用了定位服务;计算两个地理坐标之间的距离(米)&am…

air001研究笔记.基于arduino快速开发简单项目

一、air001芯片简介 air001是厂商合宙推出的一款tssop封装的mcu芯片。支持swd与串口烧录,多面向简单的功能简单类别的电子产品,因为官方文档齐全上手简易,所以也特别适合非专业爱好者乃至于幼儿编程。芯片内置资源:AIR001芯片数据…

家教上门助教小程序源码,家教小程序,家教系统,家教app,家教源码

家教上门助教小程序源码,家教小程序,家教系统,家教app,家教源码 推荐使用宝塔面板Linux NginxPHPMYSQL 支持家教老师筛选 支持家教人员入住 支持购买课程 支持教学资讯 支持订单课程

项目管理十大知识领域之项目沟通管理

一、项目沟通管理概述 项目沟通管理是项目管理中的重要组成部分,它涉及到对项目信息的收集、处理、存档和传递。一个成功的项目沟通管理可以确保团队成员、利益相关者以及其他相关方之间的信息交流畅通无阻,从而推动项目顺利进行。沟通管理涉及的内容不…

【微信小程序开发】环境介绍和基本使用

文章目录 前言1. 项目的基本组成结构1.1 JSON 配置文件的作用1.2 如何新建小程序页面1.3 修改项目首页1.4 WXML 模板1.5 WXSS 样式1.6 JS 逻辑交互 2. 宿主环境2.1 什么是宿主环境2.2 通信模型2.3 运行机制2.4 组件2.4.1 view 组件的基本使用:2.4.2 scroll-view 组件…

docker 使用 vcs/2018 Verdi等 eda 软件

好不容易在ubuntu 安装好了eda软件,转眼就发现了自己的无知。 有博主几年前就搞定了docker上的EDA工具。而且更全,更简单。只恨自己太无知啊。 Synopsys EDA Tools docker image - EDA资源使用讨论 - EETOP 创芯网论坛 (原名:电子顶级开发网…

LLM之RAG实战(十六)| 使用Llama-2、PgVector和LlamaIndex构建LLM Rag Pipeline

近年来,大型语言模型(LLM)取得了显著的进步,然而大模型缺点之一是幻觉问题,即“一本正经的胡说八道”。其中RAG(Retrieval Augmented Generation,检索增强生成)是解决幻觉比较有效的…

CSS 浮动 定位

文章目录 网页布局的本质浮动如何设置浮动测试浮动 定位相对定位绝对定位测试定位 网页布局的本质 用 CSS 来摆放盒子,把盒子摆放到相应位置。 CSS 提供了三种传统布局方式(简单说就是盒子如何进行排列)。 普通流(标准流&#…

Python网络爬虫步骤是什么?新手小白必看 !

python网络爬虫步骤:首先准备所需库,编写爬虫调度程序;然后编写url管理器,并编写网页下载器;接着编写网页解析器;最后编写网页输出器即可。 本教程操作环境:windows7系统、python3.9版&#xff…