1. 简介
Redis是一种开源的内存键值存储系统,可以用作数据库、缓存、消息代理和队列等。SpringBoot的Spring Data Redis模块提供了对Redis的支持,可以快速方便地操作Redis。
2. 配置
2.1 添加依赖
在pom.xml
中添加spring-boot-starter-data-redis依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.2 配置application.properties
在application.properties
中配置Redis连接信息:
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
以上示例默认了Redis服务器在本地,端口号为6379,密码为空。实际应用中需要根据实际情况进行修改。
3. RedisTemplate操作Redis
3.1 添加RedisTemplate bean
在SpringBoot配置类中添加RedisTemplate bean:
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}
以上代码中,RedisTemplate<String, Object>
表示Redis中key为String类型,value为Object类型。
注意,以上代码中需要配置序列化器,这里使用了StringRedisSerializer
和GenericJackson2JsonRedisSerializer
,前者用于将key序列化为字节数组,后者用于将value序列化为JSON字符串。
3.2 使用RedisTemplate进行操作
使用RedisTemplate
进行操作时,需要在需要使用的类中注入RedisTemplate
:
@RestController
public class RedisController {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@GetMapping("/redis/set")
public void set() {
redisTemplate.opsForValue().set("name", "张三");
}
@GetMapping("/redis/get")
public String get() {
Object value = redisTemplate.opsForValue().get("name");
return value != null ? value.toString() : null;
}
}
以上代码演示了使用RedisTemplate.opsForValue()
进行Redis操作的方法。opsForValue()
返回ValueOperations
类型的对象,该对象提供了对Redis中字符串的简单操作方法,如set
、get
等。
4. Spring Cache操作Redis
4.1 添加@EnableCaching注解
在SpringBoot主类上添加@EnableCaching
注解,启用缓存:
@SpringBootApplication
@EnableCaching
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4.2 在方法上添加缓存注解
在需要进行缓存的方法上添加@Cacheable
注解,如:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
@Cacheable(value = "userCache", key = "#id")
public User getUserById(Long id) {
return userDao.getUserById(id);
}
}
以上代码中,在getUserById
方法上添加了@Cacheable
注解,表示该方法可以进行缓存,value = "userCache"
表示缓存名为userCache
,key = "#id"
表示以参数id
为key进行缓存。
4.3 配置缓存管理器
在SpringBoot配置类中配置缓存管理器:
@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
.entryTtl(Duration.ofMinutes(30));
return RedisCacheManager.builder(factory)
.cacheDefaults(redisCacheConfiguration)
.build();
}
}
以上代码中,通过RedisCacheConfiguration
配置缓存管理器,.serializeKeysWith
和.serializeValuesWith
方法表示对缓存key和value进行序列化,这里使用了StringRedisSerializer
和GenericJackson2JsonRedisSerializer
。
.entryTtl(Duration.ofMinutes(30))
表示缓存30分钟过期。可以根据实际应用情况进行修改。
5. 总结
通过本文,我们了解了SpringBoot如何操作Redis,包括使用RedisTemplate
和@Cacheable
注解。
在使用Redis时,需要注意序列化器的配置,以及缓存管理器的配置。对于一些复杂的操作,如Redis中的一些高级数据结构,可以使用专门的Java Redis客户端,如Jedis、Lettuce等。