SpringBoot中如何操作Redis

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类型。

注意,以上代码中需要配置序列化器,这里使用了StringRedisSerializerGenericJackson2JsonRedisSerializer,前者用于将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中字符串的简单操作方法,如setget等。

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"表示缓存名为userCachekey = "#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进行序列化,这里使用了StringRedisSerializerGenericJackson2JsonRedisSerializer

.entryTtl(Duration.ofMinutes(30))表示缓存30分钟过期。可以根据实际应用情况进行修改。

5. 总结

通过本文,我们了解了SpringBoot如何操作Redis,包括使用RedisTemplate@Cacheable注解。

在使用Redis时,需要注意序列化器的配置,以及缓存管理器的配置。对于一些复杂的操作,如Redis中的一些高级数据结构,可以使用专门的Java Redis客户端,如Jedis、Lettuce等。

数据库标签