

SpringBoot Cacheの実現案を検討している。キャッシュプロバイダーはRedisになる。  
@Cacheableには、key:valueでメソッドの結果をキャッシュする。  
業務要件としては、結果をキャッシュすることだけではなく、keyをhsetに保存する必要がある。  
そのため、結果をキャッシュした後に、ビジネスロジックを実行させる手段があるか？  
調べたところ、CacheResolverではなさそうだ。ソースは以下になる。

[code]

        @Caching(
                cacheable={@Cacheable(value ="hello", key="#myUser.name + #root.methodName") },
                put={@CachePut(value="hello", key="#myUser.name + #root.methodName", condition="#myUser.age==12") },
                evict={@CacheEvict(value="hello", key="#myUser.name + #root.methodName", allEntries=false, condition="#myUser.age==99")}
        )
        public List<Map<String, Object>> getResultList(MyUser myUser) {
            Map<String, Object> resultMap1 = new HashMap<>();
            resultMap1.put("result", "result10");
            Map<String, Object> resultMap2 = new HashMap<>();
            resultMap2.put("result", "result20");
            System.out.println("MyRedisService.getResultList executed! input : " + myUser.toString());
            return List.of(resultMap1, resultMap2);
        }
    
    
[/code]


CC BY-SA 4.0
2022-07-17T08:18:19.133
90036
2022-07-18T03:45:21.810
53568
question
java spring spring-boot java8 redis
SpringBoot Cache を拡張し、ビジネスロジックを追加したい。


一つ方法を見つけました。

Step１：RedisCacheを拡張する。`get` メソッドをオーバーライドし、ビジネスロジックを追加する。  
Step２：RedisCacheManagerを拡張する。`createRedisCache`
メソッドをオーバーライドし、Step1に拡張したRedisCacheを利用する。  
Step３：Step２にて拡張したRedisCacheManagerをコンフィグレーションクラスにBeanとして作成する。


CC BY-SA 4.0
2022-07-18T01:46:04.477
90056
2022-07-18T03:45:21.810
2022-07-18T03:45:21.810
3060
53568
90036
answer