redis简单使用
- 集成依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- application.yml连接redis
spring:
redis:
host: localhost
port: 6379
database: 0
jedis:
pool:
max-active: 8
max-wait: 1ms
max-idle: 4
min-idle: 0
cache:
redis:
time-to-live: 1800000
- 注入RedisTemplate
@Autowired
private RedisTemplate redisTemplate;
- 配置RedisConfig类继承CachingConfigurerSupport防止在存入key的时候在redis中找不到key
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory connectionFactory){
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
- 使用
@PutMapping
public R<String> update(@RequestBody DishDto dishDto){
dishService.updateWithFlavor(dishDto);
String key="dish_"+dishDto.getCategoryId()+"_"+dishDto.getStatus();
redisTemplate.delete(key);
return R.success("修改成功");
}
注解缓存
- 配置依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
- application.yml连接redis
spring:
redis:
host: localhost
port: 6379
database: 0
jedis:
pool:
max-active: 8
max-wait: 1ms
max-idle: 4
min-idle: 0
cache:
redis:
time-to-live: 1800000
- 开启缓存注解功能,在启动类上
@Slf4j
@SpringBootApplication
@ServletComponentScan
@EnableTransactionManagement
@EnableCaching
public class ReggieApplication {
public static void main(String[] args) {
SpringApplication.run(ReggieApplication.class,args);
log.info("Project start running...");
}
}
- 使用
@PostMapping
@CacheEvict(value = "setmealCache",allEntries = true)
public R<String> save(@RequestBody SetmealDto setmealDto){
log.info(setmealDto.toString());
setmealService.saveWithDish(setmealDto);
return R.success("添加成功");
}
解释:cacheEvict表示在删除时删除缓存中的内容,value:从setmealCache缓存中删除,allEntries=true:删除缓存中所有内容
@Cacheable(value = "setmealCache",key = "#setmeal.categoryId+'_'+#setmeal.status")
public R<List<Setmeal>> list(Setmeal setmeal){
log.info(setmeal.toString());
LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(setmeal.getCategoryId()!=null,Setmeal::getCategoryId,setmeal.getCategoryId());
queryWrapper.eq(setmeal.getStatus()!=null,Setmeal::getStatus,setmeal.getStatus());
queryWrapper.orderByDesc(Setmeal::getUpdateTime);
List<Setmeal> setmealList = setmealService.list(queryWrapper);
return R.success(setmealList);
}
解释:Cacheable表示在运行完程序之后把参数保存在缓存中,value:给缓存起的名字,key:要取值的key,"#setmeal.categoryId+‘_’+#setmeal.status"为设置key的内容用#参数来动态取值。