2017-02-27 3 views
1

にキャッシュ名を追加するため春のKeyGenerator私は、キャッシングのためのRedisと春のキャッシュを使用していますキー

私は、次の方法があります:

@CachePut(value ="DATA1", key = "#key1") 
    public Object saveData1(long key1, Object obj) { 
     return obj; 
    } 


    @CachePut(value ="DATA2", key = "#key1") 
    public Object saveData2(long key1, Object obj) { 
     return obj; 
    } 

これはキーで衝突を引き起こしていると、データが上書きされているが。

キャッシュ名を追加してキーを生成したいとします。

Like:DATA1-key1、DATA2-key1。

可能ですか?

私は、クラス名とメソッド名を使用するいくつかの例を見てきました。しかし、私はキャッシュ名を使用したい。

ありがとうございます。

+0

([春のKeyGeneratorが機能していないとのユニークなキャッシュキーの生成]の可能重複http://stackoverflow.com/questions/27574786/generating-unique-cache-key-with-spring-keygenerator-not-working ) –

答えて

3

このようなカスタムキージェネレータを作成します。あなたはどのように基本的なアイデアを得るだろう少なくとも、私はこれをテストしていないが、動作するはずです

@CachePut(value = "DATA1", keyGenerator = "myKeyGenerator") 

@Component("myKeyGenerator") 
public class MyKeyGenerator implements KeyGenerator { 
    public Object generate(Object target, Method method, Object... params) { 
     String[] value = new String[1]; 
     long key; 
     CachePut cachePut = method.getAnnotation(CachePut.class); 
     if (cachePut != null) { 
      value = cachePut.value(); 
     } 
     key = (long) params[0]; 
     return value[0] + "-" + key; 
    } 
} 

、以下のようにそれを使用しますそれをするために。

+0

ありがとうございます。メソッドのアノテーションを取得できるかどうかはわかりませんでした。 –

0

CacheManager Beanでパラメータ "usePrefix"をtrueに設定する必要があります。これにより、キーにcacheNameが付加されます。

<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"> 
    ... 
    <property name="usePrefix"><value>true</value></property> 
    ... 
</bean> 
関連する問題