SpringBoot Redis入门(二)——数据库查询结果缓存

  • 学习SpringBoot提供的Cacheable注解的使用;
  • 自行实现一个方法级的缓存注解,实现数据库查询结果缓存,加深对Spring缓存框架的理解。

我们使用SpringBoot自带的Lettuce缓存框架,通过上一节已经完成了对Lettuce的集成,测试只是做了手动写代码将我们的对象写入到redis中了,也读了出来,缓存实际也就是干存取的工作。你项目中要这么使用也没毛病。
但牛逼的程序猿就是要把懒发挥到极致,Cacheable就是这么产生的。

通过在方法上添加 @Cacheable 注解,框架可以自动帮我们把查询结果缓存起来,我们也无需特地去使用缓存api去取。存和读操作透明了,

直接撸代码:


	 /**
     * 这是手动存取缓存,存和取缓存占了很大代码量,而且入侵了我们的代码,非常不友好。
     * @param username
     * @return
     */
	public Object getUserInfo(String username) {
        if (redisTemplate.opsForValue().get(username) == null) {
            System.out.println("未获取到缓存,新建用户信息.............");
            Map<String, Object> user = new HashMap<>();
            user.put("username", username);
            user.put("usercode", "zhangsan");
            user.put("sex", "男");
            user.put("createtime", new Date());
            redisTemplate.opsForValue().set(username, user);
        }
        return redisTemplate.opsForValue().get(username);
    }

	/**
     * 使用注解时,只有一行代码,业务代码也没有被入侵,简直不要太爽。
     * @param username
     * @return
     */
    @Cacheable(value = "USER_INFO", key = "#username")
    public Object getUserInfo3(String username) {
        System.out.println("未获取到缓存,从数据库获取.............");
        Map<String, Object> user = new HashMap<>();
        user.put("username", username);
        user.put("usercode", "zhangsan");
        user.put("sex", "男");
        user.put("createtime", DateUtils.format(new Date()));
        return user;
    }
public @interface Cacheable {
	//缓存的名称
    @AliasFor("cacheNames")
    String[] value() default {};
    @AliasFor("value")
    String[] cacheNames() default {};

	// key值,可以从参数中获取
    String key() default "";

    String keyGenerator() default "";

    String cacheManager() default "";

    String cacheResolver() default "";

    String condition() default "";

    String unless() default "";

    boolean sync() default false;
}

Redis服务端存储结构:
SpringBoot Redis入门(二)——数据库查询结果缓存_第1张图片

小结:

  • @Cacheable 使用起来确实方便多了,不需要额外配置,简直不要太爽。

你可能感兴趣的:(spring,boot,数据库,缓存,Cacheable)