SpringBoot 自定义缓存生成器KeyGenerator

原创
2021/04/21 23:21
阅读数 98

默认情况下缓存的 key 是方法的参数。如果不想使用默认的 key,可以使用自定义 key(使用参数定义 key 的方式、或者使用 root 对象来生成 key)

 

一、创建自定义 KeyGenerator

自定义的 MyKeyGenerator 实现 KeyGenerator 接口,然后实现该接口中的 generate 方法。

@Component
public class MyKeyGenerator implements KeyGenerator {

    @Override
    public Object generate(Object target, Method method, Object... params) {
        String key = method.getName() + "::" + Arrays.toString(params);
        System.out.println("key:" + key);
        return key;
    }

}

generate 方法的三个参数分别是当前对象、当前请求的方法以及方法的参数,开发者可根据这些信息纽成一个新的 key 返回,返回值就是缓存的 key。

 

二、使用自定义的 KeyGenerator

1、编写dao

@Repository
@CacheConfig(cacheNames = "demo_cache")
public class DemoDao {

    @Autowired
    private MyKeyGenerator myKeyGenerator;

    @Cacheable(keyGenerator = "myKeyGenerator")
    public Demo getDemoById(Integer id) {
        System.out.println("select method");
        return new Demo().setId(id).setName("xianren").setNum(20);
    }

}

2、编写Controller

@RestController
@RequestMapping("/demo")
public class DemoController {

    @Autowired
    private DemoDao demoDao;

    @GetMapping
    public void demo() {
        // 连续获取两次数据
        System.out.println("--- 连续获取两次数据 ---");
        demoDao.getDemoById(1);
        demoDao.getDemoById(1);
    }

}

 

三、验证结果

我们请求接口:http://127.0.0.1:8086/demo

我们看到生成了自定义的key。

我们查看Redis的key,也是我们自定义的key。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部