spring boot整合redis(单机+集群)

Spring Boot整合Redis(单机+集群)可以通过配置文件和注解实现,支持自动配置、数据序列化等功能。

Spring Boot 项目集成 Redis 的方式详解

在现代的软件开发过程中,缓存技术已经成为了提高系统性能的重要手段,而 Redis 作为一种高性能的内存数据库,被广泛应用于各种项目中,本文将详细介绍如何在 Spring Boot 项目中集成 Redis。

spring boot整合redis(单机+集群)

1、引入依赖

在项目的 pom.xml 文件中,添加 Spring Boot Starter Redis 的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>springbootstarterdataredis</artifactId>
</dependency>

2、配置 Redis

在 application.properties 或者 application.yml 文件中,添加 Redis 的配置信息:

spring boot整合redis(单机+集群)

application.properties
spring.redis.host=localhost
spring.redis.port=6379

或者:

application.yml
spring:
  redis:
    host: localhost
    port: 6379

3、创建 RedisTemplate 和 StringRedisTemplate 对象

在项目中创建一个配置类,用于创建 RedisTemplate 和 StringRedisTemplate 对象:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
    @Autowired
    private RedisConnectionFactory factory;
    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new StringRedisSerializer());
        return template;
    }
}

4、使用 RedisTemplate 和 StringRedisTemplate 操作 Redis

spring boot整合redis(单机+集群)

在需要操作 Redis 的地方,注入 RedisTemplate 或 StringRedisTemplate 对象,然后调用相应的方法进行操作:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
@Service
public class UserService {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    public void setUser(String key, User user) {
        redisTemplate.opsForValue().set(key, user);
    }
}

5、测试 Redis 是否集成成功

在项目中编写一个测试类,用于测试 Redis 是否集成成功:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import org.junit.runner.RunWith;
import javax.annotation.Resource;
import java.util.*;
import static org.assertj.core.api.Assertions.*;
@RunWith(SpringRunner.class) // spring boot测试需要用这个来启动spring上下文环境,才能使用mockito等框架进行mock操作,否则会报错。@RunWith注解告诉Junit这是一个SpringBoot测试类,SpringRunner是Junit提供的一个运行器,可以执行SpringBoot的测试用例,SpringRunner继承自BlockJUnit4ClassRunner,同时实现了JUnit接口,内部通过SpringApplication来启动SpringBoot应用,所以它能够支持SpringBoot的自动化测试,这里我们使用了SpringRunner的构造方法,传入了一个SpringBoot的启动类(Application),这样当执行这个测试类的时候,就会启动SpringBoot应用。@SpringBootTest注解表示这是一个SpringBoot的测试类,它会加载SpringBoot的配置信息,并启动内嵌的Web服务器,这样我们就可以在这个测试类中使用MockMvc来进行web层的测试了,这里我们还指定了我们的启动类为Application,这样当执行这个测试类的时候,就会启动Application这个SpringBoot应用。@Resource注解表示这是一个资源注入方式,它可以对任何变量、Collection、Map等类型进行注入,这里我们将Spring容器中的StringRedisTemplate注入到了我们的测试类中,方便我们进行后续的操作。@Test注解表示这是一个测试方法,这个方法将会被Junit执行,这里我们在这个方法中进行了一个简单的测试:先向redis中存入一个字符串"hello",然后再取出这个字符串,最后判断这个字符串是否是"hello",如果是就表示我们的redis是正常工作的,如果不是就表示我们的redis有问题,assertEquals方法用来比较两个值是否相等,如果相等就表示测试通过,如果不相等就表示测试失败,fail表示断言失败,会抛出一个AssertionError异常,后面可以跟一个错误信息,这里我们直接将fail后面的字符串作为错误信息输出到控制台,fail("redis test failed")表示断言失败,输出"redis test failed"到控制台,assertThat方法用来比较两个值是否相等,它的用法和assertEquals类似,但是它可以支持更多的比较方式,比如可以使用lambda表达式来进行比较,这里我们使用了assertThat的is方法来判断两个值是否相等,is后面可以跟一个函数式接口(Function),这个函数式接口接收一个参数,返回一个布尔值,这里我们传入了一个Lambda表达式x > x == "hello",这个Lambda表达式接收一个参数x,然后判断x是否等于"hello",如果等于就返回true,否则返回false,is后面的第二个参数是一个描述信息,当断言失败的时候会输出这个描述信息到控制台,这里我们直接将"expected 'hello' but was 'world'"作为描述信息输出到控制台,最后一行代码表示如果断言失败,就抛出一个AssertionError异常,并输出错误信息到控制台,如果断言成功,就什么都不做,这里的assertThat方法和上面的assertEquals方法类似,只是多了一个函数式接口的支持而已,所以这里就不再赘述了,注意:在使用assertThat方法的时候需要注意一下版本问题,如果你使用的是Java8的话,那么可以直接使用lambda表达式;如果你使用的是Java7的话,那么就需要使用匿名内部类的方式来实现函数式接口了,因为Java7不支持lambda表达式,所以在这里我们需要使用Java8来编写我们的代码,另外需要注意的是:在使用assertThat方法的时候需要在pom文件中添加junitjupiterapi和hamcrestcore这两个依赖才能正常使用lambda表达式和is方法,这两个依赖是必须的!否则会编译失败!junitjupiterapi是Junit5提供的API,hamcrestcore是Junit5提供的一个匹配器库,它提供了很多种匹配器供我们使用,比如is、equalTo等等,这两个依赖是必须的!否则会编译失败!@Test注解表示这是一个测试方法,这个方法将会被Junit执行,这里我们在这个方法中进行了一个简单的测试:先向redis中存入一个字符串"hello",然后再取出这个字符串,最后判断这个字符串是否是"hello",如果是就表示我们的redis是正常工作的,如果不是就表示我们的redis有问题,assertEquals方法用来比较两个值是否相等,如果相等就表示测试通过,如果不相等就表示测试失败,fail表示断言失败,会抛出一个AssertionError异常,后面可以跟一个错误信息,这里我们直接将fail后面的字符串作为错误信息输出到控制台,fail("redis test failed")表示断言失败,输出"redis test failed"到控制台,assertThat方法用来比较两个值是否相等,它的用法和assertEquals类似,但是它可以支持更多的比较方式,比如可以使用lambda表达式来进行比较,这里我们使用了assertThat的is方法来判断两个值是否相等,is后面可以跟一个函数式接口(Function),这个函数式接口接收一个参数,返回一个布尔值,这里我们传入了一个Lambda表达式x > x == "hello",这个Lambda表达式接收一个参数x,然后判断x是否等于"hello",如果等于就返回true,否则返回false,is后面的第二个参数是一个描述信息,当断言失败的时候会输出这个描述信息到控制台,这里我们直接将"expected 'hello' but was 'world'"作为描述信息输出到控制台,最后一行代码表示如果断言失败,就抛出一个AssertionError异常,并输出错误信息到控制台,如果断言成功,就什么都不做,这里的assertThat方法和上面的assertEquals方法类似,只是多了一个函数式接口的支持而已,所以这里就不再赘述了,注意:在使用assertThat方法的时候需要注意一下版本问题,如果你使用的是Java8的话,那么可以直接使用lambda表达式;如果你使用的是Java7的话,那么就需要使用匿名内部类的方式来实现函数式接口了,因为Java7不支持lambda表达式,所以在这里我们需要使用Java8来编写我们的代码,另外需要注意的是:在使用assertThat方法的时候需要在pom文件中添加junitjupiterapi和hamcrestcore这两个依赖才能正常使用lambda表达式和is方法,这两个依赖是必须的!否则会编译失败!junitjupiterapi是Junit5提供的API,hamcrestcore是Junit5提供的一个匹配器库,它提供了很多种匹配

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/504169.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2024-05-21 07:08
Next 2024-05-21 07:09

相关推荐

  • 基于Redis的限流器的实现(示例讲解)

    Redis限流器实现:使用setnx命令,设置一个键值对,限制访问次数。超过限制则拒绝请求。

    2024-05-21
    0113
  • redis查找key报错怎么解决「redis如何快速查找key」

    当使用Redis进行key查找时,可能会遇到报错的情况,本文将介绍如何解决Redis查找key报错的问题,并提供详细的技术教程。我们需要了解Redis的报错信息,常见的Redis报错信息包括`(error) ERR key not found`和`(error) WRONGTYPE Operation against a key ho……

    2023-11-12
    0337
  • redis 存文件

    Redis文件怎么保存的Redis是一个开源的内存数据结构存储系统,用作数据库、缓存和消息代理,它支持多种数据结构,如字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set),Redis将所有数据存储在磁盘上,而不是将所有数据加载到内存中,这使得Redis具有非常高的性能和可扩展性,本文将介绍Redis文件的保存方式以及相关技术细节,Redi

    2023-12-15
    0122
  • Redis可视化工具Redis Desktop Manager的具体使用

    Redis Desktop Manager是一款开源的,跨平台的Redis数据库管理工具,它提供了直观的操作界面和丰富的功能,使得我们能够更方便地管理和操作Redis数据库。安装与启动1、1 下载与安装我们需要从Redis官方网站下载Redis Desktop Manager的安装包,下载完成后,双击安装包进行安装,按照提示完成安装过……

    2024-03-01
    0138
  • 通过 Redis 实现 RPC 远程方法调用(支持多种编程语言)

    在现代软件开发中,RPC(Remote Procedure Call,远程过程调用)是一种非常常见的技术,它允许一个程序在另一个网络中的计算机上执行一个函数或方法,就像它是在本地计算机上执行一样,Redis 是一个开源的内存数据结构存储系统,通常用于缓存、消息队列等场景,Redis 也可以用于实现 RPC 服务。以下是如何使用 Red……

    2024-03-19
    0169
  • redis多个队列怎么执行的

    Redis是一个开源的,基于内存的数据结构存储系统,可以用作数据库、缓存和消息中间件,在Redis中,队列是一种特殊的数据结构,它遵循FIFO(先进先出)的原则,在实际应用中,我们可能需要使用多个队列来处理不同的任务或请求,本文将介绍如何在Redis中创建和使用多个队列,并讨论如何执行这些队列中的任务。1. 创建队列在Redis中,我……

    2024-01-22
    0176

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入