springboot 集成redis 实现键值序列化 最全最优化最高性能的 代码实现
时间: 2023-08-19 08:07:29 浏览: 115
以下是一个基于Spring Boot和Redis的键值序列化的示例代码:
首先,在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
```
然后,在application.properties文件中配置Redis连接信息:
```properties
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
```
接下来,我们可以创建一个RedisConfig类,用于配置RedisTemplate和RedisCacheManager:
```java
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
// 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(mapper);
// 设置value的序列化规则和key的序列化规则
template.setValueSerializer(serializer);
template.setKeySerializer(new StringRedisSerializer());
template.afterPropertiesSet();
return template;
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheManager cacheManager = RedisCacheManager.create(factory);
cacheManager.setDefaultExpiration(1800); // 设置缓存过期时间(单位:秒)
return cacheManager;
}
}
```
现在,我们可以在任何需要使用Redis的地方注入RedisTemplate,并使用它来存储和读取数据。例如:
```java
@Service
public class UserService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public User getUserById(Long id) {
String key = "user:" + id;
User user = (User) redisTemplate.opsForValue().get(key);
if (user == null) {
// 从数据库中获取用户信息
user = userRepository.findById(id).orElse(null);
if (user != null) {
redisTemplate.opsForValue().set(key, user);
}
}
return user;
}
}
```
在上面的示例中,我们将用户信息存储在Redis中,并设置了一个过期时间。当需要获取用户信息时,首先从缓存中查找,如果缓存中没有,则从数据库中获取,并将结果存储在缓存中,以便下一次使用。这样可以大大提高系统的性能和响应速度。
总结:以上是一个基于Spring Boot和Redis的键值序列化的示例代码,通过使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值,可以实现最优化最高性能的键值序列化。
阅读全文