Fork me on GitEE

关于springboot cache 交给redis存储

添加依赖redis依赖 ,cache是springstart web 自带的
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.1.RELEASE</version>
</dependency>


添加配置

cache:
redis:
# 允许缓存空值。
cache-null-values: true
# 缓存键值对前缀
key-prefix: xy
# 缓存时间。 默认情况下,条目永不过期。
time-to-live: 30000
# 写入Redis时是否使用密钥前缀。
use-key-prefix: false
redis:
host: localhost
port: 6379

添加@EnableCaching 开启缓存




添加一个controller来测试下 缓存
@RestController
@RequestMapping("/cache")
public class CacheController {

@Cacheable(value = "save", key = " #userName")
@PostMapping("/save")
public String save(@RequestParam("username") String userName , @RequestParam("age")Integer age){

System.out.println("执行方法----------------save");
return "age:"+age+"userName:" +userName;
}

@CachePut(value = "update", key = " #userName")
@PostMapping("/update")
public String upodate(@RequestParam("username") String userName , @RequestParam("age")Integer age){

System.out.println("执行方法----------------update");
return "age:"+age+"userName:" +userName;
}

@CacheEvict(value = "delete", key = " #userName")
@PostMapping("/delete")
public String delete(@RequestParam("username") String userName , @RequestParam("age")Integer age){

System.out.println("执行方法----------------delete");
return "age:"+age+"userName:" +userName;
}
}



        @Cacheable 支持如下几个参数:

    value:缓存位置名称,不能为空,如果使用EHCache,就是ehcache.xml中声明的cache的name, 指明将值缓存到哪个Cache中

    key:缓存的key,默认为空,既表示使用方法的参数类型及参数值作为key,支持SpEL,如果要引用参数值使用井号加参数名,如:#userId,一般来说,我们的更新操作只需要刷新缓存中某一个值,所以定义缓存的key值的方式就很重要,最好是能够唯一,因为这样可以准确的清除掉特定的缓存,而不会影响到其它缓存值 ,本例子中使用实体加冒号再加ID组合成键的名称,如"user:1"、"order:223123"等

    condition:触发条件,只有满足条件的情况才会加入缓存,默认为空,既表示全部都加入缓存,支持SpEL

       @CachePut

    与@Cacheable不同,@CachePut不仅会缓存方法的结果,还会执行方法的代码段。它支持的属性和用法都与@Cacheable一致。

  @CacheEvict

    与@Cacheable功能相反,@CacheEvict表明所修饰的方法是用来删除失效或无用的缓存数据。

    condition:触发条件,只有满足条件的情况才会清除缓存,默认为空,支持SpEL
    allEntries:true表示清除value中的全部缓存,默认为false

 

 

只有存储key发生改变时候才会重新存储 其他参数改变或者重复调用则不会执行该请求则直接把redis储存的value返回

 

 

 

 

 

 

@CachePut(value = "update",  key = " #userName") 每次调用都会去updateredis

 

 

 

@CacheEvict(value = "delete",  key = " #userName")   每次调用方法都会去del redis数据

 

 








posted @ 2021-06-03 17:48  问道于盲  阅读(127)  评论(0编辑  收藏  举报