Spring Boot整合Redis

Spring Boot整合Redis

Redis介绍
Redis是一个开源 (BSD许可)的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件,并提供多种语言的APl。Redis支持多种类型的数据结构,例如字符串( strings)、散列(hashes)、列表(lists)、集合(sets )等。同时,Redis内部内置了复本( replication) 、LUA脚本(Lua scripting)、LRU驱动事件(LRU eviction)、事务( Transaction )和不同级别的磁盘持久化( persistence ),并通过Redis Sentinel和自动分区提供高可用性( high availability )。
相较于其他的key-value键值存储系统而言,Redis 主要有以下优点。
( 1)存取速度快: Redis速度非常快,每秒可执行大约110000次的设值操作,或者执行81 000次的读取操作。
(2)支持丰富的数据类型: Redis 支持开发人员常用的大多数数据类型,例如列表、集合、排序集和散列等。
(3)操作具有原子性:所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新后的值。
(4)提供多种功能: Redis 提供了多种功能特性,可用作非关系型数据库、缓存中间件、消息中间件等。
Redis下载安装
下载地址:https://github.com/tporadowski/redis/releases
Redis支持多种方式的安装配置,如Windows、Linux系统安装,Docker镜像安装等,我们下面介绍的是Windows安装。
Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到硬盘,解压后,将文件夹重新命名为 redis。
在这里插入图片描述
打开文件,内容如下:
在这里插入图片描述
打开一个 cmd 窗口:
在这里插入图片描述
进入界面输入:

redis-server.exe redis.windows.conf

输入之后,会显示如下界面:
在这里插入图片描述
这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。
在redis目录下运行:

redis-cli.exe -h 127.0.0.1 -p 6379

设置键值对:

set myKey abc

取出键值对:

get myKey

显示如下页面后证明Redis服务正常启动,无异常。
在这里插入图片描述
(如上操作是为了测试Redis能否正常使用)
开启Redis服务
在Windows下Redis安装包解压后会有多个目录文件,包括两个重要的可执行文件:redis-cli.exe和redis-server.exe。其中,redis-server.exe用于开启Redis服务,redis-cli.exe用于开启客户端工具。
这里选择双击redis-server.exe文件即可开启Redis服务,效果图如下:
在这里插入图片描述
从图中可以看出Redis服务正常启动同时在终端窗口显示了当前Redis版本为5.0.14.1和默认启动端口为6379。
Redis可视化客户端工具安装
这里使用一个Redis客户端可视化管理工具Redis Desktop Manager连接Redis服务进行管理,可以去查找其他博主的安装教程。
使用Spring Boot整合Redis
上面对Redis进行了简单的介绍,并完成了Redis服务的安装配置,接下来开始讲解Spring Boot与Redis的整合使用,具体步骤如下。

  1. 添加Spring Data Redis依赖启动器。先在项目的pom.xml文件中添加Redis依赖启动器,示例代码如下:
<!-- Redis服务启动器 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 编写实体类。在com.example.demo.domain包下编写对应的实体类,如像显示
    Student.java
package com.example.demo.domain;
import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;
import org.springframework.data.redis.core.index.Indexed;
import java.util.List;
@RedisHash("students")//指定操作实体类对象在Redis数据库中的存储空间
public class Student {
    @Id
    private String id;
    @Indexed
    private String name;
    @Indexed
    private String sid;
    private College college;
    private List<Subject> subjectList;
    public Student() {
    }
    public Student(String name,String sid){
        this.name=name;
        this.sid=sid;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSid() {
        return sid;
    }
    public void setSid(String sid) {
        this.sid = sid;
    }
    public College getCollege() {
        return college;
    }
    public void setCollege(College college) {
        this.college = college;
    }
    public List<Subject> getSubjectList() {
        return subjectList;
    }
    public void setSubjectList(List<Subject> subjectList) {
        this.subjectList = subjectList;
    }
    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", sid='" + sid + '\'' +
                ", college=" + college +
                ", subjectList=" + subjectList +
                '}';
    }
}

College.java

package com.example.demo.domain;
import org.springframework.data.redis.core.index.Indexed;
public class College {
    @Indexed
    private String college;
    @Indexed
    private String school;
    public College(String college,String school){
        this.college=college;
        this.school=school;
    }
    public String getCollege() {
        return college;
    }
    public void setCollege(String college) {
        this.college = college;
    }
    public String getSchool() {
        return school;
    }
    public void setSchool(String school) {
        this.school = school;
    }
    @Override
    public String toString() {
        return "College{" +
                "college='" + college + '\'' +
                ", school='" + school + '\'' +
                '}';
    }
}

Subject.java

package com.example.demo.domain;
import org.springframework.data.redis.core.index.Indexed;
public class Subject {
    @Indexed
    private String course;
    @Indexed
    private String grade;
    public Subject(String course,String grade){
        this.course=course;
        this.grade=grade;
    }
    public String getCourse() {
        return course;
    }
    public void setCourse(String course) {
        this.course = course;
    }
    public String getGrade() {
        return grade;
    }
    public void setGrade(String grade) {
        this.grade = grade;
    }
    @Override
    public String toString() {
        return "Subject{" +
                "course='" + course + '\'' +
                ", grade='" + grade + '\'' +
                '}';
    }
}

3.编写Repository接口。在com.example.demo.repository包下创建Student实体类的StudentRepository接口。

package com.example.demo.repository;
import com.example.demo.domain.Student;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface StudentRepository extends CrudRepository<Student,String> {
    List<Student> findBySid(String sid);
    Page<Student> findStudentBySid(String sid, Pageable page);
    List<Student> findByNameAndSid(String name, String sid);
    List<Student> findByCollege_College(String college);
    List<Student> findBySubjectList_Grade(String grade);
}

4.Redis数据库连接配置。在全局配置文件application.properties中添加Redis数据库的连接配置。

# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=

5.编写单元测试进行接口方法测试。

package com.example.demo;
import com.example.demo.domain.College;
import com.example.demo.domain.Student;
import com.example.demo.domain.Subject;
import com.example.demo.repository.StudentRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTests {
    @Autowired
    private StudentRepository repository;
    @Test
    public void saveStudent(){
        Student student=new Student("小明","001");
        Student student1=new Student("james","002");
        College college=new College("计算机学院","广东科技学院");
        student.setCollege(college);

        List<Subject> list=new ArrayList<>();
        Subject englis=new Subject("英语","90");
        Subject language=new Subject("语文","80");
        list.add(englis);
        list.add(language);
        student.setSubjectList(list);

        Student save=repository.save(student);
        Student save2=repository.save(student1);
        System.out.println(save);
        System.out.println(save2);
    }
    @Test
    public void selectStudent(){
        List<Student> list=repository.findByCollege_College("计算机学院");
        System.out.println(list);
    }
    @Test
    public void updateStudent(){
        Student student=repository.findByNameAndSid("小明","001").get(0);
        student.setSid("003");
        Student update=repository.save(student);
        System.out.println(update);
    }
    @Test
    public void deleteStudent(){
        Student student=repository.findByNameAndSid("小明","003").get(0);
        repository.delete(student);
    }
}

6.整合测试。选择RedisTests测试类中的saveStudent()方法进行效果演示,效果如下:
在这里插入图片描述
打开之前连接的Redis客户端可视化管理工具查看数据,如下图:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值