我在服務器端使用Spring緩存(使用EHCache)來定義@Cacheable中的緩存鍵。問題在於不同的客戶端發送相同的字符串,這些字符串被用作具有不同拼寫的鍵,因爲它們會發送區分大小寫。結果是我的緩存包含的對象比他們要的要多。如何在Spring緩存中避免區分大小寫的鍵?
實施例: 比方說,我已經爲一定的方法中定義的以下緩存:
現在@Cacheable(value = "myCache", key="{#myString}")
public SomeBusinessObject getFoo(String myString, int foo){
...
}
客戶端A發送「ABC」(全部小寫)到控制器。控制器調用getFoo並將「abc」用作鍵將對象放入緩存。 客戶端B發送「abC」(大寫字母C),而不是爲密鑰「abc」返回緩存對象,而是創建密鑰「abC」的新緩存對象。
如何避免密鑰區分大小寫?
我知道我可以定義緩存鍵像這樣小寫:
@Cacheable(value = "myCache", key="{#myString.toLowerCase()}")
public SomeBusinessObject getFoo(String myString, int foo){
...
}
這當然是工作的。但我正在尋找更通用的解決方案。我有許多緩存和許多緩存鍵,並執行一些@CacheEvict和@CachePut(s),如果我將使用「toLowerCase」方法,我將永遠不要忘記它在任何地方。
也許這是非常有用的,有自己的KeyGenerator http://stackoverflow.com/questions/27574786/generating-unique-cache-key-with-spring-keygenerator-not-working – gaston
我想你可以委託到另一種實現實際緩存*的方法*之後,您可以對鍵進行所需的修改 –