栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring-Data-Redis做缓存(使用注解与不使用注解)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring-Data-Redis做缓存(使用注解与不使用注解)

1.使用注解的情况

①写RedisConfig

@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {

    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
        ... ...
        return rcm;
    }

    ... ...

}

②写RedisKeyConstant

package com.demo.yes.service.Constants;

import com.demo.yes.service.impl.RegionServiceImpl;

public final class RedisKeyConstants {

    static final String _PREFIX = "demo:";

    //实体类缓存键
    public static final class EntityCacheKey {
        public static final String D = _PREFIX+"d:";
    }

    //操作类缓存键
    public static final class OperationClassCacheKey {
        public static final String PWSWORKSTATISTICSSERVICEIMPL = _PREFIX + "xxxxxxserviceimpl";
        public static final String REGIONSERVICEIMPL = _PREFIX + "regionserviceimpl";
    }
}

③ServiceImpl类用注解

@Service
@CacheConfig(cacheNames = RedisPwsConstants.OperationClassCacheKey.REGIONSERVICEIMPL)
public class RegionServiceImpl implements IRegionService {

    @Autowired
    private Region region;

    @Override
    @Cacheable(key = "'getRegion:'+#root+'-'+#level")
    public JSONObject getRegion(String r, Integer l) {
    }
}

2.不使用注解的情况

①写RedisConfig类

同上

②写RedisKeyConstant类

同上

③写RedisServiceImpl(重要,对标注解)

@Service
public class RedisServiceImpl implements RedisService {

   @Qualifier("redisTemplateJackson")
   @Autowired()
   RedisTemplate jsonRedisTemplate;


   
   @Override
   public void saveValueToSet(String key, Object value) {
      jsonRedisTemplate.opsForSet().add(key, value);
   }

   
   @Override
   public void deleteValueBySet(String key, Object value) {
      jsonRedisTemplate.opsForSet().remove(key, value);
   }

   
   @Override
   public boolean hasValueInSet(String key, Object value) {
      return jsonRedisTemplate.opsForSet().isMember(key, value);
   }

   
   @Override
   public void deleteCacheByKey(String key) {
      jsonRedisTemplate.delete(key);
   }

   
   @Override
   public boolean hasKey(String key) {
      return jsonRedisTemplate.hasKey(key);
   }






   @Override
   public void saveKVToHash(String hash, Object key, Object value) {
      jsonRedisTemplate.opsForHash().put(hash, key, value);
   }

   @Override
   public void saveMapToHash(String hash, Map map) {
      jsonRedisTemplate.opsForHash().putAll(hash, map);
   }

   @Override
   public Map getMapByHash(String hash) {
      return jsonRedisTemplate.opsForHash().entries(hash);
   }

   @Override
   public Object getValueByHashKey(String hash, Object key) {
      return jsonRedisTemplate.opsForHash().get(hash, key);
   }

   @Override
   public boolean hasHashKey(String hash, Object key) {
      return jsonRedisTemplate.opsForHash().hasKey(hash,key);
   }

   @Override
   public void incrementByHashKey(String hash, Object key, int increment) {
      if (increment < 0) {
         throw new RuntimeException("递增因子必须大于0");
      }
      jsonRedisTemplate.opsForHash().increment(hash, key, increment);
   }







   
   @Override
   public void deleteByHashKey(String hash, Object key) {
      jsonRedisTemplate.opsForHash().delete(hash, key);
   }

   @Override
   public int countBySet(String key) {
      return jsonRedisTemplate.opsForSet().size(key).intValue();

   }



   @Override
   public void deleteAllKeys() {
      jsonRedisTemplate.delete(jsonRedisTemplate.keys("*"));
   }

   @Override
   public void expire(Object key, int secondes) {
      jsonRedisTemplate.expire(key,secondes, TimeUnit.SECONDS);
   }

   @Override
   public void incrementByKey(String key, int increment) {
      if (increment < 0) {
         throw new RuntimeException("递增因子必须大于0");
      }
      jsonRedisTemplate.opsForValue().increment(key, increment);
   }

   @Override
   public void saveObjectToValue(String key, Object object) {
      jsonRedisTemplate.opsForValue().set(key, object);
   }

   @Override
   public  Object getObjectByValue(String key) {
      Object redisResult = jsonRedisTemplate.opsForValue().get(key);
      return redisResult;
   }
}

④Controller层调用

@RestController
public class BlogController {
    @Autowired
    BlogService blogService;
    @Autowired
    RedisService redisService;
    Logger logger = LoggerFactory.getLogger(BlogController.class);

    
    @VisitLogger(behavior = "访问页面",content = "首页")
    @GetMapping("/blogs")
    public Result getBlogsByPage(@RequestParam(defaultValue = "1") Integer currentPage) {
        //有缓存直接返回
        if(redisService.hasHashKey(RedisKeyConfig.BLOG_INFO_CACHE,currentPage)){
           return   Result.succ(redisService.getValueByHashKey(RedisKeyConfig.BLOG_INFO_CACHE,currentPage));
        }
        Page page = new Page(currentPage, 5);
        IPage pageData = blogService.page(page, new QueryWrapper().eq("status", 1).orderByDesc("create_time"));
        redisService.saveKVToHash(RedisKeyConfig.BLOG_INFO_CACHE, currentPage,pageData);
        return Result.succ(pageData);
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/891127.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号