当前位置: 代码网 > it编程>编程语言>Java > SpringBoot中使用Redis案例详解

SpringBoot中使用Redis案例详解

2025年10月11日 Java 我要评论
1.配置xml文件<dependencies> <dependency> <groupid>org.springframewor

1.配置xml文件

<dependencies>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter</artifactid>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-data-redis</artifactid>
        </dependency>
        <dependency>
            <groupid>org.projectlombok</groupid>
            <artifactid>lombok</artifactid>
        </dependency>
        <dependency>
            <groupid>com.mysql</groupid>
            <artifactid>mysql-connector-j</artifactid>
        </dependency>
        <dependency>
            <groupid>com.baomidou</groupid>
            <artifactid>mybatis-plus-spring-boot3-starter</artifactid>
            <version>3.5.12</version>
        </dependency>
        <dependency>
            <groupid>com.alibaba</groupid>
            <artifactid>druid-spring-boot-3-starter</artifactid>
            <version>1.2.20</version>
        </dependency>
        <!--对象和json字符相互转换-->
        <dependency>
            <groupid>com.alibaba</groupid>
            <artifactid>fastjson</artifactid>
            <version>2.0.32</version>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-test</artifactid>
        </dependency>
    </dependencies>

2.在resources包下创建application.yml文件,并进行配置

spring:
  data:
    redis:
      host: 192.168.11.88//自己redis的ip地址
      port: 6379
  datasource:
    driver-class-name: com.mysql.cj.jdbc.driver
    url: jdbc:mysql://localhost:3306/test_db1
    username: root
    password: 123456
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.stdoutimpl

3.将app.java改为项目名称+application.java(springboot的核心启动类)

  • 负责初始化并启动整个 spring boot 应用
package com.jiazhong.mingxing.boot.boot052; // 1. 包声明
import org.springframework.boot.springapplication; // 2. 核心类导入
import org.springframework.boot.autoconfigure.springbootapplication; // 3. 核心注解导入
@springbootapplication // 4. 核心注解(关键)
public class boot052application { // 5. 启动类(类名通常与项目名对应)
    // 6. 程序入口(main方法,jvm启动时执行)
    public static void main(string[] args) {
        // 7. 启动spring boot应用的核心方法
        springapplication.run(boot052application.class, args);
    }
}

4.编写bean包

  • (主要用于存放实体类(也称为 java bean),这些类通常用于封装数据,是应用中数据传递和存储的载体)
package com.jiazhong.mingxing.boot.boot052.bean;
import com.baomidou.mybatisplus.annotation.tableid;
import com.baomidou.mybatisplus.annotation.tablelogic;
import lombok.data;
import lombok.noargsconstructor;
@data
@noargsconstructor
public class student {
    @tableid(value = "id")
    private long id;
    private string name;
    private string stuno;
    private string password;
    private character gender;
    private string birthday;
    private string placeoforigin;
    private string createtime;
    private long schoolid;
    private long courseid;
    @tablelogic(delval = "1",value = "0")
    private integer state;
    private string enrollmentdate;
    private string updatetime;
}

5.编写mapper包

  1. 定义数据库操作接口:声明 crud(增删改查)等数据库操作方法(如selectbyidinsertupdate)。
  2. 映射 sql 语句:通过 xml 文件或注解方式,将接口方法与具体的 sql 语句关联。
  3. 隔离数据访问逻辑:使 service 层无需关注数据库操作细节,只需调用 mapper 接口方法即可。
package com.jiazhong.mingxing.boot.boot052.mapper;
import com.baomidou.mybatisplus.core.mapper.basemapper;
import com.jiazhong.mingxing.boot.boot052.bean.student;
import org.apache.ibatis.annotations.mapper;
@mapper
public interface studentmapper extends basemapper<student> {
}

6.编写service包下的service类

  • service包(通常命名为com.xxx.service)是业务逻辑层的核心,负责实现应用的核心业务逻辑,协调数据访问层(mapper)和控制层(controller)之间的交互,是整个应用的 “业务处理中心”。
package com.jiazhong.mingxing.boot.boot052.service;
import com.baomidou.mybatisplus.extension.service.iservice;
import com.jiazhong.mingxing.boot.boot052.bean.student;
import org.springframework.stereotype.service;
import java.util.list;
@service
public interface studentservice extends iservice<student> {
    student findstudentbyid(string id);
    //redis存储string类型的内容
    list<student> findall1();
   //redis存储list类型的内容
    list<student> findall2();
    list<student> findall3();
    //添加学生信息
    int savestudent(student student);
    //修改学生信息
    int updatestudent(student student);
    //删除学生信息
    int removestudent(string id);
}

7.编写service报下的实现类

package com.jiazhong.mingxing.boot.boot052.service.impl;
import com.alibaba.fastjson.jsonarray;
import com.baomidou.mybatisplus.core.conditions.query.querywrapper;
import com.baomidou.mybatisplus.extension.service.impl.serviceimpl;
import com.jiazhong.mingxing.boot.boot052.bean.student;
import com.jiazhong.mingxing.boot.boot052.mapper.studentmapper;
import com.jiazhong.mingxing.boot.boot052.service.studentservice;
import lombok.extern.slf4j.slf4j;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.data.redis.core.listoperations;
import org.springframework.data.redis.core.stringredistemplate;
import org.springframework.data.redis.core.valueoperations;
import org.springframework.stereotype.service;
import java.util.arraylist;
import java.util.list;
import java.util.concurrent.timeunit;
@slf4j
@service
public class studentserviceimpl extends serviceimpl<studentmapper, student> implements studentservice {
   /* @resource
    private stringredistemplate stringredistemplate;
    @resource
    private studentmapper studentmapper;*/
    private stringredistemplate stringredistemplate;
    private studentmapper studentmapper;
    private valueoperations<string,string> forvalue;
    private listoperations<string, string> forlist;
    public static final string prefix_student="prefix_student";
    public static final string all_student="all_student";
    @autowired//构造器
    public studentserviceimpl(stringredistemplate stringredistemplate, studentmapper studentmapper) {
        this.stringredistemplate = stringredistemplate;
        this.studentmapper = studentmapper;
        this.forvalue=stringredistemplate.opsforvalue();
        this.forlist=stringredistemplate.opsforlist();
    }
    @override
    public student findstudentbyid(string id) {
        log.info("开始查询id:{}的数据",id);
        //1.从redis中获取到指定id的数据
        string studentjson = forvalue.get(prefix_student + id);
        log.info("返回id:{}的数据:{}",id,studentjson);
        //2.如果存在,返回该数据
        if (studentjson!=null){
            log.info("存在该数据,结束!");
            return jsonarray.parseobject(studentjson, student.class);
        }
        //3.如果不存在该数据,从数据库中获取
        student student = studentmapper.selectbyid(id);
        log.info("不存在该数据,从数据库中获取到数据:{}",student);
        //4.存放到redis中
        string jsonstring = jsonarray.tojsonstring(student);
        forvalue.set(prefix_student+id,jsonstring,1, timeunit.hours);
        log.info("存放数据到redis中");
        //5.返回数据
        return student;
    }
    @override
    public list<student> findall1() {
        //1.从redis中获取
        string json = forvalue.get(all_student);
        //2.如果存在,返回数据,结束
        if (json!=null){
            return jsonarray.parsearray(json, student.class);
        }
        //3.如果不存在,连接数据库
        list<student> all_student = this.list();
        //4.将数据存放到redis中
        string jsonstring = jsonarray.tojsonstring(all_student);
        forvalue.set(all_student,jsonstring,1, timeunit.hours);
        //5.返回数据
        return all_student;
    }
    @override
    public list<student> findall2() {
        //1.从redis中获取
        list<string> stringlist = forlist.range(all_student, 0, -1);
        //2.如果存在,返回数据,结束
        if (stringlist!=null && !stringlist.isempty()){
            list<student> all_student=new arraylist<>();//产生空集合
            stringlist.foreach(s -> {
                student student=jsonarray.parseobject(s,student.class);
                all_student.add(student);
            });
            return all_student;
        }
        //3.如果不存在,连接数据库
        list<student> list = this.list();
        //4.将数据存放到redis中(一个一个的转成json字符串,然后放到列表中)
        list.foreach(student -> {
            string s = jsonarray.tojsonstring(student);
            forlist.rightpush(all_student,s);
        });
        //5.返回数据
        return list;
    }
    @override
    public list<student> findall3() {
        //1.从redis中获取数据
        list<string> stringlist = forlist.range(all_student, 0, -1);
        //2.如果存在返回数据结果
        if (stringlist!=null && !stringlist.isempty()){
            list<student> all_students = new arraylist<>();
            stringlist.foreach(id -> {
                string json = forvalue.get(id);
                student student = jsonarray.parseobject(json, student.class);
                all_students.add(student);
            });
            return all_students;
        }
        //3.如果数据不存在,连接数据库
        list<student> list=this.list();
        //4.将对象存放到redis中
        list.foreach(student -> {
            //4.1将id存放到集合中
            forlist.rightpush(all_student,student.getid()+"");
            //4.2将对象存放到了string中
            forvalue.set(student.getid()+"",jsonarray.tojsonstring(student));
        });
        //5.返回数据
        return list;
    }
    @override
    public int savestudent(student student) {
        //1.将数据添加到数据库中
        boolean b = this.save(student);
        //2.将刚才录入到数据库的数据查询出来
        querywrapper<student> querywrapper=new querywrapper<>();
        querywrapper.eq("name",student.getname());
        querywrapper.eq("stu_no",student.getstuno());
        student one=getone(querywrapper);
        //3.将数据添加到缓存中
        //3.1 将one存放到string中
        forvalue.set(one.getid()+"",jsonarray.tojsonstring(one));
        //3.2 将id存放到索引区list
        forlist.rightpush(all_student,one.getid()+"");
        return b?1:0;
    }
    /*@override
    public int savestudent(student student) {
        //1.将数据添加到数据库中
        boolean b = this.save(student);
        //2.将刚才录入到数据库的数据查询出来
        querywrapper<student> querywrapper=new querywrapper<>();
        querywrapper.eq("name",student.getname());
        querywrapper.eq("stu_no",student.getstuno());
        student one=getone(querywrapper);
        //3.将数据添加到缓存中
        string s = jsonarray.tojsonstring(one);
        forlist.rightpush(all_student,s);
        return b?1:0;
    }*/
    @override
    public int updatestudent(student student) {
        //1.修改数据库数据
        boolean b = updatebyid(student);
        //2.取出刚修改的数据
        querywrapper<student> querywrapper=new querywrapper<>();
        querywrapper.eq("id",student.getid());
        student sqlstudent=getone(querywrapper);
        //3.修改redis缓存中的数据
        forvalue.setifpresent(sqlstudent.getid()+"",jsonarray.tojsonstring(sqlstudent));
        return 0;
    }
    @override
    public int removestudent(string id) {
        //1.删除数据库中的数据
        boolean b = removebyid(id);
        //2.删除redis缓存中的数据
        forlist.remove(all_student,1,id+"");
        stringredistemplate.delete(id+"");
        //3.返回结果
        return b?1:0;
    }
    /*@override
    public int updatestudent(student student) {
        //1.修改数据库中的数据
        boolean update = updatebyid(student);
        //2.取出刚修改的数据
        querywrapper<student> querywrapper=new querywrapper<>();
        querywrapper.eq("id",student.getid());
        student sqlstudent=getone(querywrapper);
        //3.修改redis缓存中的数据
        list<string> stringlist = forlist.range(all_student, 0, -1);
        if (stringlist!=null && !stringlist.isempty()){
            final int[] index={0};
            stringlist.foreach(s->{
                student one=jsonarray.parseobject(s,student.class);
                if (one.getid().equals(student.getid())){
                    forlist.set(all_student,index[0],jsonarray.tojsonstring(sqlstudent));
                    index[0]++;
                }
            });
        }
        return update?1:0;
    }*/
}

8.测试

package com.jiazhong.mingxing.boot.boot052.test;
import com.jiazhong.mingxing.boot.boot052.bean.student;
import com.jiazhong.mingxing.boot.boot052.service.studentservice;
import jakarta.annotation.resource;
import lombok.extern.slf4j.slf4j;
import org.junit.jupiter.api.test;
import org.springframework.boot.test.context.springboottest;
import java.util.list;
@springboottest
@slf4j
public class app {
    @resource
    private studentservice studentservice;
    @test
    //根据id查询学生信息
    public void a(){
        student studentbyid = studentservice.findstudentbyid("1966797153254133762");
        log.info("studentbyid:{}",studentbyid);
    }
    @test
    //查询所有学生信息
    public void b1(){
        list<student> allstudent = studentservice.findall1();
        log.info("allstudent:{}",allstudent);
    }
    @test
    //查询所有学生信息(存储list类型的内容)
    public void b2(){
        list<student> allstudent = studentservice.findall2();
        allstudent.foreach(e->{
            log.info("e:{}",e);
        });
    }
    @test
    public void b3(){
        list<student> allstudent = studentservice.findall3();
        allstudent.foreach(e->{
            log.info("e:{}",e);
        });
    }
    @test
    //添加学生信息
    public void c(){
        student student = new student();
        student.setname("许锦阳");
        student.setplaceoforigin("陕西咸阳");
        student.setcourseid(1965250158253547036l);
        student.setschoolid(1965321181514842113l);
        student.setbirthday("2004-9-19");
        student.setstuno("jk202502287783");
        student.setgender('男');
        int i = studentservice.savestudent(student);
        log.info("i:{}",i);
    }
    @test
    //修改学生信息
    public void d(){
        student student = new student();
        student.setid(1966797153254133762l);
        student.setbirthday("2005-3-16");
        studentservice.updatestudent(student);
    }
    @test
    //删除学生信息
    public void e(){
        int i = studentservice.removestudent("1967044502643716098");
        log.info("i:{}",i);
    }
}

到此这篇关于springboot中使用redis(引入案例)的文章就介绍到这了,更多相关springboot使用redis内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com