Spring Boot接入Redis的步骤(参考)
在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:常见问题
-
连接失败:检查Redis服务是否启动,防火墙是否放行6379端口。
-
序列化错误:确保RedisTemplate的Key/Value序列化方式一致。
-
性能问题:合理配置连接池参数(如max-active)。
总结
-
基础步骤:引入依赖 → 配置连接 → 使用RedisTemplate操作数据。
-
生产建议:
-
使用连接池(Lettuce/Jedis)。
-
统一序列化方式(推荐JSON)。
(图片来源网络,侵删) -
对敏感操作(如分布式锁)添加重试机制。
(图片来源网络,侵删)(图片来源网络,侵删) -
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。