SpringBoot整合redis缓存的方法
SpringBoot是一款非常流行的Java开发框架,而redis则是一个非常快速、高效的数据缓存工具。将它们两者相结合可以让我们更加方便地管理数据缓存,在本文中,我们将会讲解如何在SpringBoot项目中整合redis缓存。
1. 创建SpringBoot项目
首先,在你的开发环境中创建一个新的SpringBoot项目。本篇文章将使用Spring Tool Suite 4开发工具和Maven作为构建工具,如果您用的是其他工具和构建工具也请自行参考。创建SpringBoot项目的方法可以参考官方文档。
2. 添加Spring Data Redis依赖
在pom.xml文件中添加Spring Data Redis依赖,如下所示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
这个依赖可以使我们更便利地管理redis缓存,它集成了Spring Data Redis模块,对于基本的redis缓存操作提供了一个简单、易用的API。
2.1. 配置redis连接信息
在application.properties文件中添加redis连接信息,如下所示:
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456
spring.redis.database=0
在这里,我们使用本地主机IP地址127.0.0.1和端口号6379来测试redis缓存。如果您需要支持密码认证和数据库选择,也可以在这里设置。
3. 编写Redis缓存配置类
接下来,我们需要编写一个Redis缓存配置类,用来初始化RedisTemplate和CacheManager,如下所示:
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(factory);
//使用Jackson2JsonRedisSerializer序列化java对象到redis中
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
//设置key和value的序列化方式
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// 设置hash key和value序列化方式
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
return redisTemplate;
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory){
//配置序列化
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
return RedisCacheManager.builder(redisConnectionFactory)
.cacheDefaults(redisCacheConfiguration)
.build();
}
}
这个类中,我们注入了RedisConnectionFactory并创建了一个RedisTemplate实例,然后设置了key和value的序列化方式。为了方便序列化和反序列化Java对象到redis中,我们采用了Jackson2JsonRedisSerializer。
我们还创建了一个CacheManager实例,来管理redis缓存的一些配置。在这里,我们设置了序列化方式为RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()),也就是采用了GenericJackson2JsonRedisSerializer序列化方式。
4. 定义缓存管理器
我们需要定义一个CacheManager,用来将指定数据缓存在redis中。在这个例子中,我们将数据缓存在名为"users"的缓存中。
@Cacheable(value = "users")
public User getUserById(Long id) {
User user = userRepository.findById(id).get();
return user;
}
在这里,我们使用了@Cacheable注解来标识这个方法,告诉Spring应该将数据缓存在"users"缓存中。当下一次调用getUserById方法时,Spring会从"users"缓存中获取数据,而不是从数据库中获取。
4.1. 缓存清除
除了@Cacheable注解,我们也可以使用@CacheEvict注解来清除指定缓存中的数据。
@CacheEvict(value = "users")
public void deleteUserById(Long id) {
userRepository.deleteById(id);
}
在这里,我们使用@CacheEvict注解来表示删除数据,需要清除"users"缓存。如果您需要清除所有缓存,也可以使用 @CacheEvict(allEntries = true)。
5. 执行测试
最后,我们需要进行一些测试来确保redis缓存有正确的工作。首先,我们可以通过访问缓存过的方法来放入数据到redis中。
getUserById(1L)
调用该方法后,Spring将缓存数据到"users"缓存中。如果我们再次调用getUserById(1L),则将返回缓存中的结果,而不是重新查询数据库。
getUserById(1L)
6. 总结
本文介绍了在SpringBoot项目中整合redis缓存的方法。我们创建了一个缓存配置类来初始化RedisTemplate和CacheManager,然后定义了一个CacheManager,用来缓存指定的数据。最后,我们进行了一些测试,以确保redis缓存正常工作。
使用redis缓存可以让我们更快速地访问数据,并且降低后端应用程序的负载。下一步,您可以在自己的项目中使用redis缓存来提高应用程序的性能。