文章目录
- 前置
- 依赖配置
- yml 配置
- 自定义配置(非必要)
- 正常使用
前置
你使用的是 springboot 项目,使用 yml 来进行配置,properties 同理
依赖配置
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
这个依赖会自动引入:
spring-data-redis(Spring Data Redis 核心库)
lettuce-core(默认的 Redis 客户端,基于 Netty 的高性能客户端)
yml 配置
有 3 大 redis 客户端:Jedis、Redisson、Lettuce,其中在 spring boot2 之后,redis连接默认就采用了 lettuce
spring:redis:host: localhost # Redis 服务器地址port: 6379 # Redis 服务器端口,默认是 6379password: # Redis 密码(如果没有密码,可以省略)database: 0 # 使用的数据库索引,默认是 0timeout: 2000 # 连接超时时间(毫秒)lettuce:pool:max-active: 8 # 连接池最大连接数max-idle: 8 # 连接池最大空闲连接数min-idle: 0 # 连接池最小空闲连接数max-wait: -1ms # 连接池最大阻塞等待时间(-1 表示无限制)
自定义配置(非必要)
配置完成 yml 后,你无需再配置 RedisTemplate 和 StringRedisTemplate 的 Configuration 代码了,因为 Spring Boot 会自动配置 RedisTemplate 和 StringRedisTemplate,你可以直接注入它们来操作 Redis
但是如果你非要自己在做额外的配置,那么你可以写如下这样的代码:
@Configuration
public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); // 使用StringRedisSerializer来序列化和反序列化redis的key值 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); template.setKeySerializer(stringRedisSerializer); template.setHashKeySerializer(stringRedisSerializer); // 使用GenericJackson2JsonRedisSerializer来序列化和反序列化redis的value值 GenericJackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer<>(); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); template.setValueSerializer(jackson2JsonRedisSerializer); template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; }
}
正常使用
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;@Service
public class RedisService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Autowiredprivate StringRedisTemplate stringRedisTemplate;// 存储数据public void setValue(String key, String value) {stringRedisTemplate.opsForValue().set(key, value);}// 获取数据public String getValue(String key) {return stringRedisTemplate.opsForValue().get(key);}// 存储对象public void setObject(String key, Object value) {redisTemplate.opsForValue().set(key, value);}// 获取对象public Object getObject(String key) {return redisTemplate.opsForValue().get(key);}
}