SpringBoot整合Redis
添加依赖
首先在项目中添加 Spring Data Redis 依赖启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
上述添加的 Redis 依赖启动器代码中,没有编写对应的版本号信息,这是因为 Spring Boot 为 Redis 实现了自动配置,所以会统一管理版本号信息。
编写实体类
Person.java
import lombok.Data;
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("persons") // 指定操作实体类对象在 Redis 数据库中的存储空间
@Data
public class Person {
@Id // 标识实体类主键
private String id;
@Indexed // 标识对应属性在 Redis 数据库中生成二级索引
private String firstname;
@Indexed
private String lastname;
private Address address;
private List<Family> families;
public Person(String firstname, String lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
}
Address.java
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.data.redis.core.index.Indexed;
@Data
@AllArgsConstructor
public class Address {
@Indexed
private String city;
@Indexed
private String country;
}
Family.java
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.data.redis.core.index.Indexed;
@Data
@AllArgsConstructor
public class Family {
@Indexed
private String type;
@Indexed
private String username;
}
这些实体类中,针对面向 Redis 数据库的数据操作设置了几个主要注解,这几个注解的说明如下:
@RedisHash("persoon")用于指定操作实体类对象在 Redis 数据库中的存储空间,此处表示针对 Person 实体类的数据操作都存储在 Redis 数据库中名为 persons 的存储空间下。@Id用于标识实体类主键。在 Redis 数据库中会默认生成字符串形式的 HashKey 表示唯一的实体对象 id,当然也可以在数据存储时手动指定 id。@Indexed用于标识对应属性在 Redis 数据库中生成二级索引。使用该注解后会在 Redis 数据库中生成属性对应的二级索引,索引名称就是属性名,可以方便地进行数据条件查询。
编写 Repository 接口
Spring Boot 针对包括 Redis 在内的一些常用数据库提供了自动化配置,可以通过实现 Repository 接口简化对数据库中的数据进行的增删改查操作,这些操作方法与 Spring Data JPA 操作数据的使用方法基本相同,可以使用方法名关键字进行数据操作。
创建操作 Person 实体类的 PersonRepository 接口。
import com.syuez.springbootredis.entity.Person;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface PersonRepository extends CrudRepository<Person, String> {
List<Person> findByLastname(String lastname);
Page<Person> findPersonByLastname(String lastname, Pageable page);
List<Person> findByFirstnameAndLastname(String firstname, String lastname);
List<Person> findByAddress_City(String city);
List<Person> findByFamilies_Username(String username);
}
PersonRepository 接口继承自 CrudRepository 接口,该接口定义了若干查询方法。
需要说明的是,在操作 Redis 数据库时编写的 Repository 接口文件需要继承 CrudRepository 接口,而不是继承 JpaRepository,这是因为 JpaRepository 是 Spring Boot 整合 JPA 特有的。当然,也可以在项目 pom.xml 文件中同时导入 Spring Boot 整合 JPA 依赖和 Redis 依赖,这样就可以编写一个继承 JpaRepository 的接口操作 Redis 数据库了。
Redis 连接配置
在项目的全局配置文件 application.properties 中添加 Redis 的连接配置:
spring.redis.host=localhost
spring.redis.port=6379
# 密码默认为空
spring.redis.password=
单元测试
编写单元测试进行接口方法测试。
RedisTests.java
import com.syuez.springbootredis.entity.Address;
import com.syuez.springbootredis.entity.Family;
import com.syuez.springbootredis.entity.Person;
import com.syuez.springbootredis.repository.PersonRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.List;
@SpringBootTest
public class RedisTests {
@Autowired
private PersonRepository personRepository;
@Test
public void savePerson() {
Person person = new Person("张","有才");
Person person2 = new Person("James","Harden");
// 创建并添加住址信息
Address address = new Address("北京","China");
person.setAddress(address);
// 创建并添加家庭成员
List<Family> list = new ArrayList<>();
Family dad = new Family("父亲","张良");
Family mom = new Family("母亲","李香君");
list.add(dad);
list.add(mom);
person.setFamilies(list);
Person save = personRepository.save(person);
Person save2 = personRepository.save(person2);
System.out.println(save);
System.out.println(save2);
}
@Test
public void selectPerson() {
List<Person> list = personRepository.findByAddress_City("北京");
System.out.println(list);
}
@Test
public void updatePerson() {
Person person =personRepository.findByFirstnameAndLastname("张","有才").get(0);
person.setLastname("小明");
Person update = personRepository.save(person);
System.out.println(update);
}
@Test
public void deletePerson() {
Person person = personRepository.findByFirstnameAndLastname("张","有才").get(0);
personRepository.delete(person);
}
}
这里就 不展示测试结果了,可以使用 Redis 客户端可视化管理工具查看数据。
本文摘自《Spring Boot 企业级开发教程》