【redis】Springboot redisキャッシュ注記説明


1.まず起動クラスに注記@EnableCachingを付けてキャッシュを開く
@EnableCaching  //    
public class SpringDemoApplication {

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

2.次に、必要なメソッドに@Cachable注記を追加してキャッシュできます.この注記には以下のオプションがあります.
CacheName="product"//キャッシュ名
key=「固定値」またはkey=「#selerid」(変更可能な値)/redisキャッシュ内のkey
condition=「#selerid.length>10」//に式を記入し、trueはキャッシュを行い、falseはキャッシュを行わない
unless=「#result.getCode()!=0」//以上とは逆にfalseの場合はキャッシュし、そうでない場合はキャッシュしない
@GetMapping("/list")
    @Cacheable(cacheNames = "product",key = "#sellerid",condition = "#sellerid.length() > 2",unless = "#result.getCode() != 0")
    public ResultVO list(@RequestParam(value = "sellerid", required = false) String sellerid){
        ResultVO resultVO = new ResultVO();
        resultVO.setCode(0);
        resultVO.setMsg("  ");
        ProductVO productVO = new ProductVO();
        ProductInfoVO productInfoVO = new ProductInfoVO();
        productVO.setProductInfoVOList(Arrays.asList(productInfoVO));

        productVO.setCategoryName(" ");
        productVO.setCategoryType(1);
        productInfoVO.setProductId("1001");
        productInfoVO.setProductName("   ");
        productInfoVO.setProductPrice(new BigDecimal(1.2));
        productInfoVO.setProductDescription("      ");
        productInfoVO.setProductIcon("https://ss0.baidu.com/73F1bjeh1BF3odCf/it/u=1335713607,299352424&fm=85&s=8D386E974EF26E8427A341710300E07A");



        resultVO.setData(Arrays.asList(productVO));
        return resultVO;
    }

3.@CacheEveictキャッシュの削除
AllEntries=falseクリアproduct内の所有制
AllEntries=trueデフォルト、key対応の値を削除
/**
     *   /  
     * @param form
     * @param bindingResult
     * @param map
     * @return
     */
    @PostMapping("/save")
    @CacheEvict(cacheNames = "product",key = "123",allEntries = true)
    public ModelAndView save(@Valid ProductForm form,
                             BindingResult bindingResult,
                             Map map){
        if (bindingResult.hasErrors()){
            map.put("msg",bindingResult.getFieldError().getDefaultMessage());
            map.put("url","/seller/product/error");
            return new ModelAndView("common/error",map);
        }
        try{
            ProductInfo productInfo = new ProductInfo();
            if (!StringUtils.isEmpty(form.getProductId())){
                productInfo = productService.findOne(form.getProductId());
            }else{
                form.setProductId(KeyUtils.getUniqueKey());
            }
            BeanUtils.copyProperties(form,productInfo);
            productService.save(productInfo);
        }catch (SellException e){
            map.put("msg",e.getMessage());
            map.put("url","/seller/product/index");
            return new ModelAndView("common/error",map);
        }
        map.put("url","/seller/product/list");
        return new ModelAndView("common/success",map);
    }

 
4. @CachePut
実行するたびに、キャッシュに値があるかどうかにかかわらず、新しい戻り値の置換キャッシュの値を使用してメソッドが実行されます.ここで@Cacheable:@Cacheableとは異なり、キャッシュに値がない場合はメソッドを実行してデータをキャッシュし、キャッシュに値がある場合はキャッシュから値を取得します.
 
5.@CacheConfig
@CacheConfig:クラスレベルの注記:この注記でcacheNamesを定義した場合、このタイプのすべてのメソッドの@CacheableのcacheNamesのデフォルトはこの値です.もちろん@CacheableではcacheNameの値を再定義することもできます