当前位置:   article > 正文

jetcache如果一个主体涉及多个缓存时编辑或者删除时如何同时失效多个缓存

jetcache如果一个主体涉及多个缓存时编辑或者删除时如何同时失效多个缓存

在实际使用过程中,可能会遇到这种情形:一个主体会有多个缓存,比如用户基础信息缓存、用户详情缓存,那么当删除用户信息后就需要同时失效多个缓存中该主体数据,那么jetcache支持这种应用场景么,答案是支持,只需要使用多个@CacheInvalidate注解即可,示例代码如下所示:

  1. @Override
  2. @Cached(name = "user-cache", key = "#userId", expire = 10000, cacheType = CacheType.BOTH)
  3. public User loadUser(long userId) {
  4. User userInfo = new User();
  5. userInfo.setUserId(1);
  6. userInfo.setUserName("john");
  7. return userInfo;
  8. }
  9. @Cached(name = "user-cache2", key = "#userId", expire = 10000, cacheType = CacheType.BOTH)
  10. @Override
  11. public UserInfo loadUser2(long userId) {
  12. UserInfo userInfo = new UserInfo();
  13. userInfo.setUserId(1);
  14. userInfo.setUserName("john");
  15. userInfo.setAddress("山东济宁");
  16. return userInfo;
  17. }
  18. // 同时失效多个缓存
  19. @CacheInvalidate(name = "user-cache", key = "#userId")
  20. @CacheInvalidate(name = "user-cache2", key = "#userId")
  21. @Override
  22. public void delete(Long userId) {
  23. }

那么这种支持背后的代码是如何实现的呢,感兴趣的可以看下CacheHandler的

invokeWithInvalidateOrUpdate方法
  1. private static Object invokeWithInvalidateOrUpdate(CacheInvokeContext context) throws Throwable {
  2. Object originResult = invokeOrigin(context);
  3. context.setResult(originResult);
  4. CacheInvokeConfig cic = context.getCacheInvokeConfig();
  5. // 注意下面是@CacheInvalidate的多个配置
  6. if (cic.getInvalidateAnnoConfigs() != null) {
  7. doInvalidate(context, cic.getInvalidateAnnoConfigs());
  8. }
  9. CacheUpdateAnnoConfig updateAnnoConfig = cic.getUpdateAnnoConfig();
  10. if (updateAnnoConfig != null) {
  11. doUpdate(context, updateAnnoConfig);
  12. }
  13. return originResult;
  14. }
  15. private static void doInvalidate(CacheInvokeContext context, List<CacheInvalidateAnnoConfig> annoConfig) {
  16. // 配置几个CacheInvalidate注解就会失效几个缓存,但是Update操作却不支持,大家可以想下为什么?
  17. for (CacheInvalidateAnnoConfig config : annoConfig) {
  18. doInvalidate(context, config);
  19. }
  20. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/139711
推荐阅读
相关标签
  

闽ICP备14008679号