赞
踩
Spring Boot 整合 Redis 相当简单,它利用了 Spring Data Redis 项目,使得我们可以在 Spring Boot 应用中轻松地操作 Redis。以下是如何整合 Redis 到 Spring Boot 应用的基本步骤:
首先,在你的 pom.xml
文件中添加 Spring Boot Data Redis 的依赖:
- <dependencies>
- <!-- 其他依赖 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- </dependency>
- <!-- 如果使用Lettuce作为Redis客户端,需要添加此依赖 -->
- <dependency>
- <groupId>io.lettuce</groupId>
- <artifactId>lettuce-core</artifactId>
- </dependency>
- <!-- 如果使用Jedis作为Redis客户端,需要添加此依赖 -->
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- </dependency>
- </dependencies>
注意:Lettuce和Jedis是Spring Boot支持的两个主要的Redis客户端,你可以选择其中一个。在Spring Boot 2.x中,默认使用Lettuce。
在 application.properties
或 application.yml
文件中添加 Redis 的配置信息:
application.properties 示例
- spring.redis.host=localhost
- spring.redis.port=6379
- spring.redis.password= # 如果设置了密码,则填写密码
- spring.redis.database=0 # Redis数据库索引(默认为0)
- spring.redis.jedis.pool.max-active=8 # 连接池最大连接数(使用Jedis时)
- spring.redis.jedis.pool.max-wait=-1ms # 连接池最大阻塞等待时间(使用Jedis时)
- spring.redis.jedis.pool.max-idle=8 # 连接池中的最大空闲连接(使用Jedis时)
- spring.redis.jedis.pool.min-idle=0 # 连接池中的最小空闲连接(使用Jedis时)
- spring.redis.lettuce.pool.max-active=8 # 连接池最大连接数(使用Lettuce时)
- spring.redis.lettuce.pool.max-wait=-1ms # 连接池最大阻塞等待时间(使用Lettuce时)
- spring.redis.lettuce.pool.max-idle=8 # 连接池中的最大空闲连接(使用Lettuce时)
- spring.redis.lettuce.pool.min-idle=0 # 连接池中的最小空闲连接(使用Lettuce时)
application.yml 示例
spring: redis: host: localhost port: 6379 password: # 如果设置了密码,则填写密码 database: 0 # Redis数据库索引(默认为0) jedis: pool: max-active: 8 # 连接池最大连接数(使用Jedis时) max-wait: -1ms # 连接池最大阻塞等待时间(使用Jedis时) max-idle: 8 # 连接池中的最大空闲连接(使用Jedis时) min-idle: 0 # 连接池中的最小空闲连接(使用Jedis时) lettuce: pool: max-active: 8 # 连接池最大连接数(使用Lettuce时) max-wait: -1ms # 连接池最大阻塞等待时间(使用Lettuce时) max-idle: 8 # 连接池中的最大空闲连接(使用Lettuce时) min-idle: 0 # 连接池中的最小空闲连接(使用Lettuce时)
这里要说的是:
Lettuce和Jedis两者都是Java连接Redis的客户端
选择使用Lettuce而不是Jedis的原因如下:
如果需要自定义 Redis 的配置(比如序列化器),可以创建一个配置类:
- 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 {
-
- @Bean
- public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
- RedisTemplate<String, Object> template = new RedisTemplate<>();
- template.setConnectionFactory(redisConnectionFactory);
-
- // 使用 StringRedisSerializer 来序列化和反序列化 key 值
- template.setKeySerializer(new StringRedisSerializer());
- // 使用 JdkSerializationRedisSerializer 来序列化和反序列化 value 值
- // 你也可以自定义序列化器
- template.setValueSerializer(new GenericToStringSerializer<>(Object.class));
-
- template.afterPropertiesSet();
- return template;
- }
- }
在 Spring Boot 应用中,你可以注入 RedisTemplate
或 StringRedisTemplate
来操作 Redis:
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.stereotype.Service;
-
- @Service
- public class RedisService {
-
- private final RedisTemplate<String, Object> redisTemplate;
-
- @Autowired
- public RedisService(RedisTemplate<String, Object> redisTemplate) {
- this.redisTemplate = redisTemplate;
- }
-
- public void setValue(String key, Object value) {
- redisTemplate.opsForValue().set(key, value);
- }
-
- public Object getValue(String key) {
- return redisTemplate.opsForValue().get(key);
- }
-
- // 其他操作...
- }
- 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 java.util.concurrent.TimeUnit;
-
- @SpringBootTest
- public class RedisTest {
- @Autowired
- private StringRedisTemplate stringRedisTemplate;
-
- @Test
- //测试redis
- void contextLoads2() {
- //添加缓存键值对name:mijiu并设置过期时间为1小时
- stringRedisTemplate.opsForValue().set("name","mijiu",10, TimeUnit.SECONDS);
- System.out.println(stringRedisTemplate.opsForValue().get("name"));
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。