微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.7 Redis 缓存预热

news2024/12/24 3:57:46

微服务框架

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】

多级缓存

文章目录

      • 微服务框架
      • 多级缓存
      • 48 多级缓存
        • 48.7 Redis 缓存预热
          • 48.7.1 添加Redis 缓存的需求
          • 48.7.2 冷启动和缓存预热
          • 48.7.3 缓存预热

48 多级缓存

48.7 Redis 缓存预热

48.7.1 添加Redis 缓存的需求

OK,好久不见,

在这里插入图片描述

上一次我们已经实现了由 OpenResty 到多台Tomcat 服务器的负载均衡请求【而且用的算法使得它的进程缓存可以永远生效】

但是按照我们最初的设想

请求到达 OpenResty 后,不要直接去问Tomcat 服务器

在这里插入图片描述

应该优先查询 Redis,在Redis 缓存未命中时,再去叨扰 Tomcat

在这里插入图片描述

这就是我们接下来要做的工作

48.7.2 冷启动和缓存预热

冷启动:服务刚刚启动时,Redis中并没有缓存,如果所有商品数据都在第一次查询时添加缓存,可能会给数据库带来较大压力。

缓存预热:在实际开发中,我们可以利用大数据统计技术【这个又是一个深海】用户访问的热点数据,在项目启动时将这些热点数据提前查询并保存到Redis中。

我们数据量较少,可以在启动时将所有数据都放入缓存中。

48.7.3 缓存预热
  1. 利用Docker安装Redis

docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes

在这里插入图片描述

试试用本地Redis 客户端连接

在这里插入图片描述

OK,没问题

  1. 在item-service服务中引入Redis依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

记得刷一下

在这里插入图片描述

  1. 配置Redis地址

在这里插入图片描述

  1. 编写初始化类
package com.heima.item.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.heima.item.pojo.Item;
import com.heima.item.pojo.ItemStock;
import com.heima.item.service.IItemService;
import com.heima.item.service.IItemStockService;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * ClassName: RedisHandler
 * date: 2022/11/8 16:23
 *
 * @author DingJiaxiong
 */

@Component
public class RedisHandler implements InitializingBean {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Autowired
    private IItemService itemService;

    @Autowired
    private IItemStockService stockService;

    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 = stockService.list();
        //2. 放入缓存
        for (ItemStock stock : stockList) {
            //2.1 itemstock 序列化为JSON
            String json = MAPPER.writeValueAsString(stock);
            //2.2 存入Redis
            redisTemplate.opsForValue().set("item:stock:id:" + stock.getId(),json);
        }
        
    }
}

现在直接启动一手

在这里插入图片描述

启动项目

在这里插入图片描述

可以看到,刚一跑起来就去查了数据,说明放到 Redis 了

查看客户端

在这里插入图片描述

没毛病,数据库里面一共就 10 条数据, 5 条商品,5 条库存

这就实现了缓存预热

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

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

相关文章

高通平台开发系列讲解(DSI篇)DSI函数的内部逻辑

文章目录 一、dsi_start_data_call函数二、dsi_get_pkt_stats函数三、dsi_stop_data_call函数四、回调流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢DSI层最上层函数位于dsi_netctrl.c中,该.c位于apps_proc/data/dsi_netctrl目录中,现对部分主要函数的调用流程进…

大数据工程师的“卿卿日常”

大数据工程师在日常生活中做什么&#xff1f; 长按关注《Java学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 扫码关注《Java学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 什么是数据工程&#xff1f; 数据工程是当今世界最关键和最基础的技能…

25岁,一个汽修工人转行 Python 的真实事迹!

前言 我遇到一个汽修工人&#xff0c;他没有事喜欢上网&#xff0c;看新闻&#xff0c;对于编程很有兴趣&#xff0c;也想过转行&#xff0c;但是不知道学习什么好. 如何知道 Python. 我和这位朋友的家很近&#xff0c;在过年的时候&#xff0c;我们聊过 (20 出头), 我了解他是…

在vue中,为什么不能用index作为key?

啊&#xff1f;不是吧&#xff0c;在vue中&#xff0c;不能使用index作为key呢&#xff1f;使用index作为key又好理解又方便&#xff0c;为什么不能使用呢&#xff1f;看文章就知道啦~. 一、key的作用是什么&#xff1f; key的作用众所周知&#xff0c;看一个demo就知道&…

【FFmpeg视频播放器开发】解封装解码流程、常用API和结构体简介(一)

一、前言 在正式编写 FFmpeg 播放器前&#xff0c;我们需要先简单了解下所要用到的 FFmpeg 库、播放与解码流程、函数和相关结构体。 二、FFmpeg 库简介 库介绍avcodec音视频编解码核心库avformat音视频容器格式的封装和解析avutil核心工具库swscal图像格式转换的模块swresa…

零基础如何学好Python?Python有哪些必须学的知识?

跟几个IT界的大佬提起Python&#xff0c;他们说零基础学好Python很简单&#xff0c;Python进阶需要花费些气力。那么零基础如何学好Python&#xff1f;Python有哪些必须学的知识&#xff1f;学习的策略技巧有哪些&#xff1f;今天小编整理的这篇文章将会给你启发。 Python上手…

vulnhub靶机DriftingBlue6

靶机下载地址DriftingBlues: 6 ~ VulnHub kali ip&#xff1a;192.168.174.128 靶机ip&#xff1a; 192.168.174.140 首先进行ip地址发现 进行端口扫描 这里进行目录扫描&#xff0c;我习惯性使用Linux里面的gobuster和Windows上的dirsearch一起进行扫描。 python dirsearc…

Linux | 常见指令和常用热键

啊我摔倒了..有没有人扶我起来学习.... &#x1f471;个人主页&#xff1a;《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ &#x1f492;个人社区&#xff1a;《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

升级Linux服务器你必须要知道的事

服务器安全是每个系统管理员的头等大事。除了拥有第三方安全工具&#xff08;如防火墙&#xff0c;DDoS保护等&#xff09;外&#xff0c;使生产服务器上的所有代码保持最新也是极为重要的。 当您的应用程序投入生产时&#xff0c;升级它的风险更大。如果您的服务器由Linux驱动…

超级简单基于nodejs电商管理系统的设计与实现.zip(论文+源码+ppt文档+视频录制)

相关资料下载地址&#xff1a;请点击下载》》》 该商城平台整体上实现了商品管理模块、订单交易模块,购物车模块、商品列表股那里模块、用户模块模块。在这些功能模块独立运行和相互配合下形成了一个电商商城系统。在商城实现的技术架构方面,该商城采用nodejs作为商城后台的底…

C++11标准模板(STL)- 算法(std::minmax)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 返回两个元素的较小和较大…

二次供水智慧改造,保障冬季热水稳定供给

冬季低温雨雪天气不仅仅影响到居民用水&#xff0c;也影响到二次供水泵站的维护检修。一旦设备出现故障&#xff0c;导致无法及时供水&#xff0c;居民可能喝不上一口热水&#xff0c;更不用提热水洗澡的难题了。因此&#xff0c;在冬季需要对二次供水泵站设备更加关注&#xf…

AD20和立创EDA设计(4)PCB设计

&#xff08;1&#xff09;本文主要介绍如何将从立创EDA导出的原理图&#xff0c;在AD20进行PCB设计。 &#xff08;2&#xff09;需提前观看&#xff1a;AD20和立创EDA设计&#xff08;3&#xff09;微调原理图和原理图检查&#xff1b; &#xff08;3&#xff09;邀请加入嵌入…

【数据结构Note6】-图-知识总结(图存储+BFS+DFS+最小生成树+最短路径+拓扑+逆拓扑)

文章目录6.1 图的定义及性质6.1.1 无向图和有向图6.1.2 简单图和多重图6.1.3 图的相关概念6.1.3.1 顶点的度6.1.3.2 顶点和顶点的关系6.1.3.3 子图6.1.3.4 连通分量6.1.3.5 强连通分量6.1.3.6 生成树6.1.3.7 生成森林6.1.3.8 边的权、带权图/网6.1.3.9 几种特殊的图6.2 图的存储…

课程试题库网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 模块划分&#xff1a;老师模块、班级模块、学生模块、课程模块、试题模块、试卷模块、组卷模块、考试模块、答题模) 管理…

零基础转行Python开发怎么学习呢?

转行零基础学Python编程开发难度大吗&#xff1f;从哪学起&#xff1f;近期很多小伙伴问我&#xff0c;如果自己转行学习Python&#xff0c;完全0基础能否学会呢&#xff1f;Python的难度到底有多大&#xff1f;今天&#xff0c;小编就来为大家详细解读一下这个问题。 学习 Py…

时间哈希+日期处理 睡大觉

E-睡大觉_2022河南萌新联赛第&#xff08;四&#xff09;场&#xff1a;郑州轻工业大学 (nowcoder.com) 题意&#xff1a; 思路&#xff1a; 这是一道模拟题&#xff0c;这里主要总结如何处理时间信息和日期信息 对于时间信息&#xff1a;把时分秒转化成秒&#xff0c;相当…

基于java(springboot)网吧管理系统(java毕业设计)

基于java&#xff08;springboot&#xff09;网吧管理系统 网吧管理系统是基于java编程语言&#xff0c;mysql数据库&#xff0c;springboot框架和idea开发工具开发 &#xff0c;本系统分为会员&#xff0c;网管&#xff0c;管理员三个角色&#xff0c;会员功能是注册登陆系统…

基于JAVA的网上订餐外卖系统(Java+MySQL)

美食是人类永恒的话题,无论是在古代还是现代人们对美食都有一种非常的热爱在里面,但是随着时代的发展,人们可能没有更多的时间去研究美食,很多时候人们在下班或者放学之后更希望通过网络来进行订餐,为此我开发了本基于JAVA的餐必达网上订餐系统 本餐必达网上订餐系统采用Java语…

在写vue的项目中为什么index不能做key使用?

前言 在我们写vue的的项目时&#xff0c;我们是否会疑惑后端数据为什么都会带一个Id&#xff0c;而这个Id一般都作为循环中的key来使用&#xff0c;我们为什么不直接用index来作为他的key呢&#xff1f;这样不是更方便吗&#xff1f;下面我就带大家解决解决这和疑惑吧。 key的…