SpringBoot整合redis缓存的方法

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缓存来提高应用程序的性能。

数据库标签