课堂学习 Day06 |Spring Boot基础-Spring Boot整合Redis

使用SpringBoot整合Redis实战
本文档详细介绍了如何在SpringBoot项目中集成并使用Redis,包括环境搭建、实体类和仓库接口创建、配置文件设置,以及添加、查找、删除和自定义查询等操作的测试。同时,提供了测试代码及运行效果展示。

写在前面的话

1、参考学习自:https://blog.youkuaiyun.com/howard2005/article/details/107972598
2、内容如果有不对的,希望可以指出或补充。
3、课堂回顾。

一、概述

Redis:是一个基于内存的高性能key-value数据库。其优点为:存取速度快、数据类型丰富、操作具有原子性(确保如果两个客户端并发访问,Redis服务器能接收更新后的值)、提供多种功能。

二、操作

(一)效果实现

1、搭建Redis环境、安装Redis可视化管理工具略,具体查看【参考学习链接内容】。

2、创建Spring Boot项目RedisDemo

其中需要注意的部分如下。
在这里插入图片描述
3、创建实体类、仓库接口

Address(地址实体类)、Family(家庭实体类)、Person(个人实体类)略,具体查看【参考学习链接内容】。
在这里插入图片描述
PersonRepository(仓库接口)
在这里插入图片描述
4、application.properties(全局配置文件)
在这里插入图片描述

(二)测试

1、测试方法

RedisdemoApplicationTests.java

package net.ch.lesson08.redisdemo;

import net.ch.lesson08.redisdemo.bean.Address;
import net.ch.lesson08.redisdemo.bean.Family;
import net.ch.lesson08.redisdemo.bean.Person;
import net.ch.lesson08.redisdemo.repository.PersonRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@SpringBootTest
class RedisdemoApplicationTests {

    @Autowired //注入个人仓库接口
    private PersonRepository personRepository;

    @Test
    void contextLoads() {
    }

    @Test
    public void testAddPerson(){
        // 添加第一个人
        Address address = new Address("中国", "泸州");
        Family family1 = new Family("儿子", "张晓刚");
        Family family2 = new Family("女儿", "张晓霞");
        List<Family> familyList = new ArrayList<Family>();
        familyList.add(family1);
        familyList.add(family2);
        Person person = new Person("1", "无忌", "张", address, familyList);
        personRepository.save(person);

        // 添加第二个人
        address = new Address("中国", "上海");
        family1 = new Family("儿子", "李功晨");
        family2 = new Family("女儿", "李晓丽");
        familyList = new ArrayList<Family>();
        familyList.add(family1);
        familyList.add(family2);
        person = new Person("2", "承鹏", "李", address, familyList);
        personRepository.save(person);

        // 添加第三个人
        address = new Address("中国", "北京");
        family1 = new Family("儿子", "唐玉海");
        family2 = new Family("女儿", "唐雨涵");
        familyList = new ArrayList<Family>();
        familyList.add(family1);
        familyList.add(family2);
        person = new Person("3", "大明", "唐", address, familyList);
        personRepository.save(person);

        // 添加第四个人
        address = new Address("中国", "北京");
        family1 = new Family("儿子", "张大明");
        family2 = new Family("女儿", "张丽丽");
        familyList = new ArrayList<Family>();
        familyList.add(family1);
        familyList.add(family2);
        person = new Person("4", "文勇", "张", address, familyList);
        personRepository.save(person);

        System.out.println("成功地添加了4条记录~");
    }

    @Test
    public void testFindAll(){
        //Iterable:可迭代的,可重复的
        Iterable<Person> persons = personRepository.findAll();
        persons.forEach(person -> System.out.println(person));
    }

    @Test
    public void testFindById(){
        Optional<Person> person = personRepository.findById("2");
        System.out.println(person);
    }
    @Test
    public void testDeleteAll(){
        personRepository.deleteAll();
        System.out.println("删除成功!");
    }

    @Test
    //测试自定义个性化查询-姓
    public void testFindPersonByLastName(){
        //排序-降序
        Sort.Direction sort = Sort.Direction.DESC;
        //创建分页器
        Pageable pageable = PageRequest.of( 0,2,sort, "id");
        //获取页面
        Page<Person> page = personRepository.findPersonByLastName( "张",pageable);
        //输出页面内容
        for (Person person:page.getContent() ){
            System.out.println(person);
        }
    }
}

2、测试效果

testAddPerson()
在这里插入图片描述
testFindById()
在这里插入图片描述
testFindPersonByLastName()(测试自定义个性化查询方法)
在这里插入图片描述

三、补充

1、Redis官网Redis官网

<think>好的,用户现在想学习Spring Boot,并且希望有一个具体的学习周期计划。首先,我需要回顾之前的对话历史,确保这次回答符合用户之前的要求。之前用户问的是关于2025年后端主流框架,我介绍了Spring Boot在内的多个框架,现在用户可能是在确定学习方向后,想要深入Spring Boot。 用户的需求是制定一个学习计划,所以需要明确学习路径、时间安排、资源推荐以及实践项目。考虑到用户可能是初学者,我需要将计划分阶段,从基础到进阶,逐步深入。同时,用户可能希望计划具体,比如每周的学习内容和目标,这样更容易执行。 需要确定每个阶段的时间长度,可能分为入门、核心、进阶、实战、扩展五个阶段,每个阶段大约1-2周,总共8-10周。每个阶段要涵盖关键知识点,比如Spring Boot基础、自动配置、数据访问、安全、缓存等。同时,要推荐合适的学习资源,如官方文档、书籍、在线课程等,确保用户有可靠的学习材料。 还要考虑实践项目的重要性,每个阶段结束时应该有一个小项目或练习,帮助巩固知识。最后,建议长期学习的方向,比如参与开源项目、持续学习新技术,以及考取认证等,帮助用户持续成长。 需要确保回答结构清晰,符合用户要求的Markdown格式,使用中文,正确使用LaTeX公式(如果有的话),但可能在这个学习计划中公式较少,主要用项目符号和表格来组织内容。同时,检查是否遗漏了用户可能关心的点,比如是否需要前置知识(Java基础),是否需要环境搭建指导等,在回答中应该涵盖这些内容。 最后,确保整个计划合理,时间安排不过于紧凑,兼顾理论与实践,帮助用户有效学习Spring Boot。</think>以下是为期8-10周的Spring Boot系统学习计划(含每日学习建议),基于实际工程经验设计: --- ### **第一阶段:基础筑基(1-2周)** **学习目标**:搭建完整开发环境,理解Spring Boot核心机制 **每日计划**: - **Day 1-3**:环境搭建 ```bash # 必装组件清单 JDK17+ (推荐Azul Zulu) IntelliJ IDEA Ultimate(学生可申请免费许可) Maven 3.9+(配置阿里云镜像) Docker Desktop(容器化开发) ``` - 创建首个Spring Boot项目([start.spring.io](https://start.spring.io)) - 理解pom.xml依赖管理(重点学习`spring-boot-starter-*`模式) - **Day 4-7**:核心机制 - 自动配置原理(`@SpringBootApplication`源码解析) - 配置系统(`application.yml`多环境配置) - 日志系统实战(SLF4J+Logback配置) - **Day 8-10**:RESTful开发 ```java @RestController @RequestMapping("/api/v1") public class DemoController { @GetMapping("/hello") public ResponseEntity<String> hello() { return ResponseEntity.ok("Hello Spring Boot"); } } ``` - 完成第一个API调试(Postman测试) --- ### **第二阶段:数据持久化(2周)** **学习目标**:掌握主流数据访问方案 **知识模块**: 1. **JPA/Hibernate(5天)** - 实体关系映射(`@Entity`, `@OneToMany`) - Repository模式(`CrudRepository`接口) - 事务管理(`@Transactional`注解) 2. **MyBatis进阶(3天)** - 动态SQL编写(`<if>`, `<foreach>`) - 结果集映射(`@ResultMap`) - 整合PageHelper分页插件 3. **Redis集成(2天)** ```yaml spring: redis: host: localhost port: 6379 lettuce: pool: max-active: 8 ``` - 实现缓存击穿防护(Redisson分布式锁) **实战项目**:开发图书管理系统CRUD模块(含API文档) --- ### **第三阶段:高级特性(2周)** **重点突破**: - **安全控制(3天)** - Spring Security配置(JWT认证流程) - OAuth2.0集成(第三方登录) - **消息队列(2天)** ```java @RabbitListener(queues = "orderQueue") public void processOrder(Order order) { // 业务处理 } ``` - RabbitMQ死信队列实战 - **性能优化(3天)** - Actuator监控端点配置 - JVM参数调优(GC日志分析) - 使用JMeter进行压力测试 --- ### **第四阶段:云原生实战(2周)** **核心技能**: 1. **容器化部署** ```dockerfile FROM eclipse-temurin:17-jdk-alpine VOLUME /tmp COPY target/*.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"] ``` - 编写Dockerfile最佳实践 2. **Kubernetes集成** ```yaml apiVersion: apps/v1 kind: Deployment spec: replicas: 3 template: spec: containers: - name: springboot-app image: registry.cn-hangzhou.aliyuncs.com/yourrepo/app:1.0 ``` - Helm Chart打包实践 3. **Serverless方案** - AWS Lambda部署(冷启动优化) - 阿里云函数计算整合 --- ### **第五阶段:项目实战(1-2周)** **推荐项目选题**: - 电商秒杀系统(重点解决高并发问题) - 物联网数据中台(处理百万级设备连接) - 分布式文件存储系统(集成MinIO) **项目要求**: - 代码托管到GitHub(包含CI/CD配置) - 编写Swagger API文档 - 实现代码覆盖率>80%的单元测试 --- ### **学习资源推荐** | 类型 | 推荐内容 | |------------|--------------------------------------------------------------------------| | 官方文档 | [Spring Boot Reference](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/) | | 书籍 |Spring Boot实战》(丁雪丰译)、《Spring微服务实战》 | | 视频课程 | B站"雷神的Spring Boot源码解析"(免费)、Udemy"Master Microservices with Spring Boot and Spring Cloud" | | 开发工具 | Arthas诊断工具、VisualVM性能分析、GitPod云IDE | --- ### **学习效果检验** 1. 每周完成知识脑图(推荐XMind) 2. 参与GitHub开源项目(从修复简单issue开始) 3. 通过Spring认证考试([Spring Professional Certification](https://spring.io/certifications)) --- **注意事项**: 1. 建议每日编码时间≥2小时(保持手感) 2. 遇到问题优先查看官方Issue(避免无效搜索) 3. 定期参加技术沙龙(推荐Spring中国社区活动) 这个计划可根据个人基础弹性调整,重点要理解Spring Boot的"约定优于配置"哲学,后续可向Spring Cloud微服务方向延伸发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值