Spring Data Redis 简介
1. 概述
本教程是 Spring Data Redis 的简介,它为流行的 Redis 提供了 Spring Data 平台的抽象。内存中的数据结构存储。
Redis由基于keystore的数据结构驱动来持久化数据,可以用作数据库、缓存、消息代理等。
我们将能够使用 Spring Data 的常见模式(模板等),同时还具有所有 Spring Data 项目的传统简单性。
2.Maven依赖
让我们首先在 pom.xml 中声明 Spring Data Redis 依赖项:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
<type>jar</type>
</dependency>
最新版本的 spring-data-redis 和 jedis 可以从 Maven Central 下载。
或者,我们可以使用 Redis 的 Spring Boot 启动器,这将消除对单独 spring-data 和 jedis 依赖项的需要:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.7.2</version>
</dependency>
再次,Maven Central 提供最新版本信息。
3.Redis配置
要定义应用程序客户端和 Redis 服务器实例之间的连接设置,我们需要使用 Redis 客户端。
有许多可用于 Java 的 Redis 客户端实现。在本教程中,我们将使用Jedis - 一个简单而强大的 Redis 客户端实现。
框架中对 XML 和 Java 配置都有很好的支持。在本教程中,我们将使用基于 Java 的配置。
3.1. Java配置
让我们从配置 bean 定义开始:
@Bean
JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory();
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(jedisConnectionFactory());
return template;
}
配置非常简单。
首先,使用 Jedis 客户端,我们定义一个connectionFactory。
然后我们使用 jedisConnectionFactory 定义了 RedisTemplate。这可用于通过自定义存储库查询数据。
3.2.自定义连接属性
请注意,上述配置中缺少常见的连接相关属性。例如,配置中缺少服务器地址和端口。原因很简单:我们使用默认值。
但是,如果我们需要配置连接详细信息,我们始终可以修改 jedisConnectionFactory 配置:
@Bean
JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory jedisConFactory
= new JedisConnectionFactory();
jedisConFactory.setHostName("localhost");
jedisConFactory.setPort(6379);
return jedisConFactory;
}
4.Redis存储库
让我们使用一个 Student 实体:
@RedisHash("Student")
public class Student implements Serializable {
public enum Gender {
MALE, FEMALE
}
private String id;
private String name;
private Gender gender;
private int grade;
// ...
}
4.1. Spring数据存储库
现在让我们创建StudentRepository:
@Repository
public interface StudentRepository extends CrudRepository<Student, String> {}
5. 使用StudentRepository进行数据访问
通过扩展StudentRepository中的CrudRepository,我们可以自动获得一整套执行CRUD功能的持久化方法。
5.1.保存新的学生对象
让我们在数据存储中保存一个新的学生对象:
Student student = new Student(
"Eng2015001", "John Doe", Student.Gender.MALE, 1);
studentRepository.save(student);
5.2.检索现有的学生对象
我们可以通过获取学生数据来验证上一节中学生的插入是否正确:
Student retrievedStudent =
studentRepository.findById("Eng2015001").get();
5.3.更新现有学生对象
让我们更改上面检索到的学生的姓名并再次保存:
retrievedStudent.setName("Richard Watson");
studentRepository.save(student);
最后,我们可以再次检索学生的数据并验证数据存储中的姓名是否已更新。
5.4.删除现有学生数据
我们可以删除插入的学生数据:
studentRepository.deleteById(student.getId());
现在我们可以搜索学生对象并验证结果是否为null。
5.5.查找所有学生数据
我们可以插入一些学生对象:
Student engStudent = new Student(
"Eng2015001", "John Doe", Student.Gender.MALE, 1);
Student medStudent = new Student(
"Med2015001", "Gareth Houston", Student.Gender.MALE, 2);
studentRepository.save(engStudent);
studentRepository.save(medStudent);
我们还可以通过插入集合来实现这一点。为此,有一个不同的方法 - saveAll() - 它接受单个 Iterable 对象,其中包含我们想要保留的多个学生对象。
要查找所有插入的学生,我们可以使用 findAll() 方法:
List<Student> students = new ArrayList<>();
studentRepository.findAll().forEach(students::add);
然后我们可以快速查看的大小学生列表 或通过检查每个对象的属性来验证更大的粒度。
六,结论
在本文中,我们了解了 Spring Data Redis 的基础知识。
上述示例的源代码可以在 GitHub 项目中找到。