2017-03-03 81 views
0

我需要爲我擁有的每個實體設置全局TTL,並且它應該可以在一個位置進行配置。 有通過@RedisHash註解做到這一點的機會:Spring Data Redis所有實體的全局TTL

@RedisHash(value = "persons",timeToLive = 100) 
public class Person{ 
    ... 
} 

或者我可以有一個字段

public class Person{ 
     @TimeToLeave 
     Long ttl; 
} 

但在這種情況下,我不能在一個地方改變它,這不是真的舒適的 來維護它。 我在applicaiton.properties屬性:

app.redis.ttl=100 

,這將是真棒有機會去改變它的性能水平。

回答

1

您可以通過創建KeyspaceConfiguration的子類和配置@EnableRedisRepositories來配置設置。全局TTL沒有基於屬性的配置。

@EnableRedisRepositories(keyspaceConfiguration = MyKeyspaceConfiguration.class) 
public class MyConfig { 

} 

public class MyKeyspaceConfiguration extends KeyspaceConfiguration { 


    @Override 
    public boolean hasSettingsFor(Class<?> type) { 
     return true; 
    } 

    @Override 
    public KeyspaceSettings getKeyspaceSettings(Class<?> type) { 

     KeyspaceSettings keyspaceSettings = new KeyspaceSettings(type, "my-keyspace"); 
     keyspaceSettings.setTimeToLive(3600L); 

     return keyspaceSettings; 
    } 
} 

KeyspaceConfiguration推導旨在提供放在首位Iterable<KeyspaceSettings> initialConfiguration()但因爲你要應用設置,所有類,就地創作的KeyspaceSettings更有意義。

您也可能想緩存KeyspaceSettings以避免全部創建實例,因此Java 8的Map.computeIfAbsent(…)將非常合適。

+0

謝謝,我已經閱讀了KeyspaceSettings,但是我不知道hasSettingsFor方法,我想我必須爲每個實體創建新的KeyspaceSettings。 – idmitriev

+0

我認爲Spring的開發者應該提供更簡單的解決方案,只是添加一個標誌來避免這種配置,導致它看起來太冗長。 – idmitriev

+0

小心申請機票? https://jira.spring.io/browse/DATAREDIS – mp911de