多级缓存(nginx本地缓存、JVM进程缓存、redis缓存)

news2024/12/24 9:22:51

文章目录

    • 整体示意图
    • 1.nginx缓存
    • 2.进程缓存
        • Caffeine示例
    • 3.Lua语法(为了在nginx中做编程)
    • 4.OpenResty
    • 5.封装向Tomcat发送的Http请求,获取数据
    • 6.Tomcat集群的负载均衡
    • 7.redis缓存
    • 8.查询Redis缓存
    • 9.Nginx本地缓存

整体示意图

在这里插入图片描述

1.nginx缓存

在这里插入图片描述

2.进程缓存

Caffeine示例

在这里插入图片描述

在这里插入图片描述

3.Lua语法(为了在nginx中做编程)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.OpenResty

在这里插入图片描述

5.封装向Tomcat发送的Http请求,获取数据

在这里插入图片描述

在这里插入图片描述

封装完函数之后,我们对nginx.conf进行修改(请求进来之后会去寻找item.lua)

在这里插入图片描述

item.lua文件内容

在这里插入图片描述

上面的item.lua文件中需要进行拼接数据,我们需要JSON结果处理

在这里插入图片描述

6.Tomcat集群的负载均衡

在实际生产中tomcat是肯定以集群的方式存在

当我们修改nginx.conf发送请求为集群的时候,如下图

在这里插入图片描述

这个时候存在一个问题,集群的负载均衡算法是轮询,会导致tomcat进程缓存产生浪费,举个例子

  • 假如现在有两台Tomcat服务器,一台端口为8080,一台端口为8081
  • 进行访问,查询id为1的信息,第一次查询8080端口的tomcat服务器,此时8080端口的tomcat服务器上有id为1信息的缓存,但是当我们再次查询id为1的信息,因为轮询的机制,会查询8081端口的tomcat服务器,但是id为1的进程缓存在8080端口的tomcat服务器上,并且进程缓存在集群之间不会共享,这就导致会发生一种情况,有多少tomcat服务器,就会有多少份进程缓存,这对资源是一种极大的浪费

解决方法:更换负载均衡算法为 hash $request_uri

在这里插入图片描述

这种负载均衡算法是通过对id值进行hash运算然后进行对tomcat服务器数量取余来判断访问哪台tomcat服务器,这样就保证了同一个id访问同一个tomcat服务器

7.redis缓存

两个问题

在这里插入图片描述

缓存预热代码(逻辑代码根据自己的更换即可)

public class CaffeineConfig implements InitializingBean {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Autowired
    private IItemService itemService;

    @Autowired
    private IItemStockService itemStockService;

    private static final ObjectMapper MAPPER = new ObjectMapper();

    @Override
    public void afterPropertiesSet() throws Exception {
        // 初始化缓存
        // 1.查询商品信息
        List<Item> itemList = itemService.list();
        // 2.放入缓存
        for (Item item : itemList) {
            // 2.1 item序列化为JSON
            String json = MAPPER.writeValueAsString(item);
            // 2.2 存入redis
            redisTemplate.opsForValue().set("item:id:" + item.getId(),json);
        }
        
        // 3.查询商品库存信息
        List<ItemStock> stockList = itemStockService.list();
        // 2.放入缓存
        for (ItemStock stock : stockList) {
            // 2.1 item序列化为JSON
            String json = MAPPER.writeValueAsString(stock);
            // 2.2 存入redis
            redisTemplate.opsForValue().set("item:stock:id:" + stock.getId(),json);
        }
    }
}

API简介

InitializingBean

  • 一定要实现其中的afterPropertiesSet()方法
  • 该方法会在创建Bean之后执行,也就是项目启动的时候执行,也就可以实现缓存预热效果了

ObjectMapper

  • spring自带的json序列化工具

8.查询Redis缓存

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

9.Nginx本地缓存

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多级缓存架构(二)Caffeine进程缓存

文章目录 一、引入依赖二、实现进程缓存1. 配置Config类2. 修改controller 三、运行四、测试 通过本文章&#xff0c;可以完成多级缓存架构中的进程缓存。 一、引入依赖 在item-service中引入caffeine依赖 <dependency><groupId>com.github.ben-manes.caffeine…

企业内部知识库搭建方法,一般人都不知道

让我们想象一下&#xff0c;你是一家创业公司的创始人或者是已有企业的CEO&#xff0c;你是否遇到过这样的问题&#xff0c;公司的员工有时候互相之间的信息交流不够顺畅&#xff0c;不同部门之间的知识沟通不够清晰&#xff1f; 或者是新加入的员工刚开始工作几个月都处在一个…

网络部署实战具体学习内容总结

网络部署实战具体学习内容总结 &#x1f4bb;网络部署实战课程通常旨在教授学生如何规划、配置、维护和优化计算机网络。这些课程涵盖了广泛的主题&#xff0c;以确保学生具备网络部署和管理所需的技能。 网络部署实战课程具体学习内容&#x1f447; 1️⃣网络架构设计及网络原…

遥测终端机选择要点:功能、稳定性与成本的综合考量

在当今的智能化时代&#xff0c;遥测终端机作为数据采集、传输和处理的关键设备&#xff0c;广泛应用于水利、气象、环保等领域。然而&#xff0c;面对市场上琳琅满目的遥测终端机产品&#xff0c;如何选择一款性能优良、稳定性高且成本合理的设备成为摆在用户面前的一大难题。…

第一篇:node的背景及版本的检查

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 前言 Node.js 是一个基于 Chrome V8 JavaScript 引擎…

制造业CRM系统选型技巧-这四个功能更加重要

目前&#xff0c;促进制造业数字化转型是时代的发展方向。为了实现这一趋势&#xff0c;CRM管理系统在制造业中的运用至关重要。那样&#xff0c;制造业CRM应该如何选择呢&#xff1f;高度关注这种业务艰难和解决方案&#xff1a;全方位客户管理、灵便订制作用、高效客户服务以…

【SpringBoot3】Spring Boot 3.0 介绍以及新特性

文章目录 一、Spring Boot 3.01、介绍2、Spring Boot 核心概念3、Spring Boot 3.0 新特性 二、Spring Boot Starter1、介绍2、Starter 命名规则3、官方提供了哪些Starter 三、spring-boot-starter-parent 说明四、示例&#xff1a;创建web项目参考 一、Spring Boot 3.0 1、介绍…

【健康小贴士】关节炎是不是冻出来的?

大家冬天肯定被父母唠叨过&#xff1a; 「天气这么冷&#xff0c;裤子穿这么短&#xff0c;小心得关节炎&#xff01;」 ❌这种说法其实是不对的或者并不全面&#xff0c;答案来了&#x1f440;

鸿蒙开发笔记(七):应用状态管理,LocalStorage及AppStorage的使用

开发者要实现应用级的&#xff0c;或者多个页面的状态数据共享&#xff0c;就需要用到应用级别的状态管理的概念。ArkTS根据不同特性&#xff0c;提供了多种应用状态管理的能力&#xff1a; LocalStorage&#xff1a;页面级UI状态存储&#xff0c;通常用于UIAbility内、页面间的…

win10系统postgresql重装软件后原数据如何迁移

1、备份postgresql安装目录下的data文件夹 2、重新安装postgresql同一版本的软件 3、停止postgresql-x64-12服务 4、替换data文件夹 删除postgresql安装后新的的data文件夹 删除后将第一步备份的data文件夹粘贴过来&#xff0c;还是同一位置 5、启动postgresql-x64-12服务 …

结构化流的介绍

目录 有界数据和无界数据 有界数据 无界数据 结构化流 基本介绍 入门案例 结构化流的编程模型 数据结构 数据源(Source) File Source Kafka Source(Spark 和 Kafka 整合) 整合Kafka准备工作 从kafka中读取数据 流式处理 批处理 数据写入Kafka中 流式处理 批处理…

基于Java SSM框架实现新生入学信息管理系统项目【项目源码+论文说明】

基于java的SSM框架实现新生入学信息管理系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认…

第十五讲_css水平垂直居中的技巧

css水平垂直居中的技巧 1. 水平垂直居中&#xff08;场景一&#xff09;2. 水平垂直居中&#xff08;场景二&#xff09;3. 水平垂直居中&#xff08;场景三&#xff09;4. 水平垂直居中&#xff08;场景四&#xff09; 1. 水平垂直居中&#xff08;场景一&#xff09; 条件&a…

C#开源免费的Blazor图表库

前言 今天分享一款基于ApexCharts.js封装的、C#开源免费的Blazor图表库&#xff1a;Blazor-ApexCharts。 10款值得推荐的Blazor UI组件库 全面的ASP.NET Core Blazor简介和快速入门 ApexCharts.js介绍 ApexCharts.js开源地址&#xff1a;GitHub - apexcharts/apexcharts.js:…

超强文档搜索引擎AnyTXT Searcher本地搭建

文章目录 前言1. AnyTXT Searcher1.1 下载安装AnyTXT Searcher 2. 下载安装注册cpolar3. AnyTXT Searcher设置和操作3.1 AnyTXT结合cpolar—公网访问搜索神器3.2 公网访问测试 4. 固定连接公网地址 前言 你是否遇到过这种情况&#xff0c;异地办公或者不在公司&#xff0c;想找…

EOCR电动机保护器故障原因查询

在电动机保护方面&#xff0c;电子式电机保护器的应用越来越广泛。电子式电动机保护器可靠性强、灵敏度高&#xff0c;并具有多种保护功能&#xff0c;如&#xff1a;过电流、欠电流、缺相、逆相、堵转、三相不平衡、接地、短路等。 但有一部分电子式电动机保护器产品在检测到…

HTML5:dialog

JavaScript 练手小技巧&#xff1a;HTML5 的 dialog 标签制作对话框_dialog html-CSDN博客 <dialog id"dialog"> <h2 align"center">修改</h2> <input type"text" id"title1" placeholder"标题" value…

ChatGPT:人工智能划时代的标志(文末送书)

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. 什么是ChatGPT?二. ChatGPT是如何工作的&#xff1f;三. ChatGPT的应用领域四. ChatGPT的优缺点…

不小心删了u盘里的word文档怎么恢复(含三种恢复方法)

在日常生活和工作中&#xff0c;U盘因其便携性而成为存储和传输数据的重要工具。然而&#xff0c;有时会发生误删重要文件的情况&#xff0c;如不小心删了U盘里的Word文档。面对这种情况&#xff0c;许多用户感到束手无策。本文将为您介绍如何恢复不小心删除的U盘Word文档&…

如何一台电脑操作两个adb 设备

1.首先使用 adb devies 命令 2.然后使用 adb -s 上面的返回的id号 shell 进入对应的开发板