使用SpringCache、Redis完成数据缓存
时间: 2024-01-28 15:03:49 浏览: 34
使用SpringCache和Redis可以很方便地实现数据缓存,下面是具体的步骤:
1. 配置Redis
首先需要在项目中引入Redis相关的依赖,如下:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
```
然后在application.properties文件中配置Redis的连接信息,如下:
```properties
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456
```
2. 配置SpringCache
在SpringBoot中,可以使用@Cacheable、@CachePut、@CacheEvict等注解来实现缓存,但是需要配置一个CacheManager来管理缓存。可以使用RedisCacheManager来管理Redis缓存,如下:
```java
@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setHostName("127.0.0.1");
jedisConnectionFactory.setPort(6379);
jedisConnectionFactory.setPassword("123456");
return jedisConnectionFactory;
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setDefaultSerializer(new StringRedisSerializer());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
@Bean
public CacheManager cacheManager() {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
RedisCacheManager redisCacheManager = RedisCacheManager.builder(redisConnectionFactory())
.cacheDefaults(redisCacheConfiguration)
.transactionAware()
.build();
return redisCacheManager;
}
}
```
其中,redisConnectionFactory方法是用来创建Redis连接的,redisTemplate方法是用来进行Redis操作的,cacheManager方法是用来创建RedisCacheManager的。
3. 使用缓存
有了上面的配置之后,就可以在项目中使用缓存了。例如,我们可以对一个方法进行缓存,如下:
```java
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Cacheable(value = "userCache", key = "#id")
public User getUserById(Long id) {
System.out.println("getUserById from DB");
return userRepository.findById(id).orElse(null);
}
}
```
在这个例子中,我们使用了@Cacheable注解将getUserById方法进行了缓存,value属性表示缓存的名称,key属性表示缓存的键值。如果缓存中已经有了对应的数据,则直接从缓存中获取数据,否则就从数据库中获取数据,并将数据加入到缓存中。
4. 清除缓存
有时候需要从缓存中清除某些数据,可以使用@CacheEvict注解来实现,如下:
```java
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Cacheable(value = "userCache", key = "#id")
public User getUserById(Long id) {
System.out.println("getUserById from DB");
return userRepository.findById(id).orElse(null);
}
@CacheEvict(value = "userCache", key = "#id")
public void deleteUserById(Long id) {
userRepository.deleteById(id);
}
}
```
在这个例子中,我们使用了@CacheEvict注解将deleteUserById方法进行了缓存清除,value属性表示缓存的名称,key属性表示缓存的键值。如果有对应的数据,则从缓存中清除该数据。