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

Posted Ding Jiaxiong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.7 Redis 缓存预热相关的知识,希望对你有一定的参考价值。

微服务框架

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

多级缓存

文章目录

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 条库存

这就实现了缓存预热

SpringCloud与Docker微服务架构实战pdf

下载地址:网盘下载

作为一部帮助大家实现微服务架构落地的作品,《Spring Cloud与Docker微服务架构实战》覆盖了微服务理论、微服务开发框架(Spring Cloud)以及运行平台(Docker)三大主题。全书可分为三部分,第1章对微服务架构进行了系统的介绍;第2-11章使用Spring Cloud开发框架编写了一个“电影售票系统”;第12-14章则讲解了如何将微服务应用运行在Docker之上。全书Demo驱动学习,以连贯的场景、具体的代码示例来引导读者学习相关知识,最终使用特定的技术栈实现微服务架构的落地。
周立,Spring Cloud中国社区联合发起人。拥有近7年的软件系统开发经验,多年系统架构经验。对Spring Cloud、微服务、持续集成、持续交付有一定见地。
热爱技术交流,曾代表公司参加全球微服务架构高峰论坛、QCon等技术沙龙。拥抱开源,在GitHub与[email protected]上开源多个项目,并获得了开源中国的推荐,例如开源电子书《使用Spring Cloud与Docker实战微服务》等。
笔者博客:http://itmuch.com,定期分享Spring Cloud相关博客。读者可扫码关注Spring Cloud 中国社区公众号以及作者公众号。
下载地址:网盘下载





以上是关于微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.7 Redis 缓存预热的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud与Docker微服务架构实战pdf

微服务SpringCloud项目架构搭建入门

Java学习微服务架构SpringCloud

微服务架构下的服务治理:如何在 SpringCloud 框架中实现服务的注册与发现

主流的微服务框架

JAVA架构师之SpringBoot,SpringCloud构建微服务项目架构