JAVA开发(Redis @Cacheable注解的使用)

@Cacheable 注解用于查询的操作,首先从缓存中查找,如果缓存不存在,就去数据库查,然后将查询的结果写入缓存。

启动类上需要 @EnableCaching

@EnableCaching
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application .class,args);
	}
}

@Cacheable 注解在方法上,表示该方法的返回结果是可以缓存的。也就是说,该方法的返回结果会放在缓存中,以便于以后使用相同的参数调用该方法时,会返回缓存中的值,而不会实际执行该方法。

    @GetMapping("gettoken")
    @Cacheable(value = "member#PT1H", key = "'qywxmodel:token:'+ #corpid", condition = "#language = 1")
    Map<String, Object> gettoken(@RequestParam("corpid")String corpid, @RequestParam("corpsecret")String corpsecret);
   

@Cacheable注解三个属性。
value : 必须要的。就是个自己取的名字,通过它指明了第一次调用这个方法时返回的bookList将被存在内存的哪里。
key : 可选。要使用SpEL表达式,这里与参数username对应,当传入的username值变了的话就不去取缓存里的数据了,而是执行getBooksByUsernameAndLanguage方法。(这是必须的,因为username变了,返回值也就变了,缓存里的数据不符合了,因此这个选项很重要)。spring默认用方法的签名来当做key。
condition:方法返回的结果bookList,要不要缓存起来?condition就添加了一个限定条件。这个例子中,只有传入的语言代码是1,返回的bookList才会被缓存起来,如果给language传了别的值,那么bookList是不会缓存起来的。

那么需要更新缓存怎么操作呢,这是需要@CachePut

@Cacheable 的逻辑是:查找缓存 - 有就返回 -没有就执行方法体 - 将结果缓存起来;
@CachePut 的逻辑是:执行方法体 - 将结果缓存起来;
所以 @Cacheable 适用于查询数据的方法,@CachePut 适用于更新数据的方法。

    /**
     * 内部员工缓存信息
     * @param phone
     * @param status
     * @param b
     * @param messge
     * @return
     */
    @CachePut(value = "member#PT5M", key = "'employee:' + #phone")
    public Map<String, Object> employee(String phone,String status , boolean b ,String messge ) {
        Map<String, Object> resMap = new HashMap<>();
        resMap.put("phone", phone);
        resMap.put("status", status); 
        resMap.put("flag",  b);
		resMap.put("messge",messge);
        return resMap;
    }


 

猜你喜欢

转载自blog.csdn.net/dongjing991/article/details/130343627
今日推荐