Spring Boot接入Redis的步骤(参考)

06-01 1433阅读

        在Spring Boot项目中接入Redis主要分为以下几个步骤,包括依赖引入、配置连接、操作Redis等。下面详细介绍如何整合Redis到Spring Boot项目中。


1. 添加Redis依赖

        在pom.xml中引入Spring Data Redis和Lettuce(或Jedis)客户端依赖:


    org.springframework.boot
    spring-boot-starter-data-redis



    io.lettuce
    lettuce-core



2. 配置Redis连接

        在application.yml或application.properties中配置Redis服务器地址、端口、密码等:

spring:
  redis:
    host: localhost   # Redis服务器IP
    port: 6379        # Redis端口
    password: 123456  # Redis密码(若无密码可省略)
    database: 0       # 默认DB索引(0-15)
    lettuce:
      pool:           # 连接池配置(可选)
        max-active: 8  # 最大连接数
        max-idle: 4    # 最大空闲连接
        min-idle: 1    # 最小空闲连接

 3. 配置RedisTemplate(可选)

        Spring Boot默认提供RedisTemplate和StringRedisTemplate,但默认使用JDK序列化(可读性差)。可以自定义序列化方式:

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.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate template = new RedisTemplate();
        template.setConnectionFactory(factory);
        // Key使用String序列化
        template.setKeySerializer(new StringRedisSerializer());
        
        // Value使用JSON序列化
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        
        // HashKey/Value同样处理
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
}

 4. 使用RedisTemplate操作Redis

        在Service中注入RedisTemplate,进行数据存取:

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@Service
public class RedisService {
    private final RedisTemplate redisTemplate;
    public RedisService(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }
    // 存储数据
    public void setValue(String key, Object value, long timeout) {
        redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
    }
    // 获取数据
    public Object getValue(String key) {
        return redisTemplate.opsForValue().get(key);
    }
    // 删除数据
    public void deleteKey(String key) {
        redisTemplate.delete(key);
    }
    // 操作Hash
    public void setHashValue(String key, String field, Object value) {
        redisTemplate.opsForHash().put(key, field, value);
    }
    // 其他操作:List、Set、ZSet等类似
}

 5. 使用StringRedisTemplate(简化版)

如果只需要操作字符串,可以直接使用StringRedisTemplate(默认使用String序列化):

import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
@Service
public class StringRedisService {
    private final StringRedisTemplate stringRedisTemplate;
    public StringRedisService(StringRedisTemplate stringRedisTemplate) {
        this.stringRedisTemplate = stringRedisTemplate;
    }
    public void setString(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }
    public String getString(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }
}

6. 测试Redis连接

        编写单元测试验证Redis是否正常工作:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class RedisTest {
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    public void testRedis() {
        redisTemplate.opsForValue().set("testKey", "Hello Redis!");
        String value = (String) redisTemplate.opsForValue().get("testKey");
        System.out.println(value); // 输出: Hello Redis!
    }
}

7. 高级功能(可选)

        (1) 发布/订阅(Pub/Sub)

// 发布消息
redisTemplate.convertAndSend("channel-name", "Message Content");
// 订阅消息(需配置MessageListener)
@Bean
public MessageListenerAdapter listenerAdapter(Receiver receiver) {
    return new MessageListenerAdapter(receiver, "receiveMessage");
}
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory factory, MessageListenerAdapter listener) {
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(factory);
    container.addMessageListener(listener, new ChannelTopic("channel-name"));
    return container;
}

(2) 分布式锁

        使用Redisson或setIfAbsent实现:

// 加锁(SETNX + 过期时间)
Boolean locked = redisTemplate.opsForValue().setIfAbsent("lockKey", "1", 10, TimeUnit.SECONDS);
if (locked) {
    try {
        // 执行业务逻辑
    } finally {
        redisTemplate.delete("lockKey"); // 释放锁
    }
}

 8:常见问题

  1. 连接失败:检查Redis服务是否启动,防火墙是否放行6379端口。

  2. 序列化错误:确保RedisTemplate的Key/Value序列化方式一致。

  3. 性能问题:合理配置连接池参数(如max-active)。


总结

  • 基础步骤:引入依赖 → 配置连接 → 使用RedisTemplate操作数据。

  • 生产建议:

    • 使用连接池(Lettuce/Jedis)。

    • 统一序列化方式(推荐JSON)。

      Spring Boot接入Redis的步骤(参考)
      (图片来源网络,侵删)
    • 对敏感操作(如分布式锁)添加重试机制。

    Spring Boot接入Redis的步骤(参考)
    (图片来源网络,侵删)
    Spring Boot接入Redis的步骤(参考)
    (图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码