Spring Data Redis 简介

评论 0 浏览 0 2016-02-05

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-redisjedis 可以从 Maven Central 下载。

或者,我们可以使用 Redis 的 Spring Boot 启动器,这将消除对单独 spring-datajedis 依赖项的需要:

<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 项目中找到。

最后更新2023-11-16
0 个评论
标签