说明
- Redis-08-SpringBoot缓存之Redis
操作步骤
》加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
》添加配置
spring.redis.host=192.168.3.241
spring.redis.port=6379
spring.redis.password=123456
spring.redis.database=0
spring.cache.type=redis
spring.cache.cache-names=name1,name2
》开启缓存
@SpringBootApplication
@EnableCaching // 开启缓存
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
》简单使用
@RestController
@RequestMapping("/cache")
public class CacheController {
/*
* 说明:
* —— @Cacheable注解中的各个值支持SpEL表达式
* —— 如果是纯字符串而非SpEL表达式也必须加上单引号
* —— 以下几种注解方式供参考
*/
// @Cacheable(cacheNames = "name1", key = "'key1'")
// @Cacheable(cacheNames = "name1", key = "'uid:' + #user.id")
// @Cacheable(cacheNames = "name1", key = "#{user.id}")
@RequestMapping("/hello")
@Cacheable(cacheNames = "name1", key = "'key1'")
public String hello() {
return "hello";
}
/*
* 说明:
* —— @CachePut更新指定缓存,根据cacheNames、key
* —— 更新后缓存内容为当前方法的return值
*/
@RequestMapping("/put")
@CachePut(cacheNames = "name1", key = "'key1'")
public String put() {
return "put";
}
/*
* 说明:
* —— @CacheEvict删除指定缓存,根据cacheNames、key
*/
@RequestMapping("/evict")
@CacheEvict(cacheNames = "name1", key = "'key1'")
public String evict() {
return "evict";
}
}
》处理Redis乱码
@Configuration
public class MyCacheConfig extends CachingConfigurerSupport {
@Autowired
private RedisConnectionFactory redisConnectionFactory;
/*
* 重写缓存管理者,改用Redis实现
*/
@Override
public CacheManager cacheManager() {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
redisCacheConfiguration = redisCacheConfiguration
// 不缓存空值
.disableCachingNullValues()
// 设置key序列化器(处理Redis中key乱码)
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
//
/*
* 设置value序列化器(处理Redis中value乱码)
* 这里简单测试都使用了StringRedisSerializer,你也可以用GenericJackson2JsonRedisSerializer
*/
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
return RedisCacheManager
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
.cacheDefaults(redisCacheConfiguration).build();
}
}