Ich verwende Spring-Caching (mit EHCache) auf Serverseite, die den/die Cache-Schlüssel innerhalb von @Cacheable definiert. Das Problem besteht darin, dass verschiedene Clients dieselben Zeichenfolgen senden, die als Schlüssel mit unterschiedlicher Schreibweise verwendet werden, da sie die Groß- und Kleinschreibung berücksichtigen. Das Ergebnis ist, dass meine Caches mehr Objekte enthalten, als sie benötigen.Wie zu vermeiden, Groß-und Kleinschreibung Schlüssel in Spring-Cache?
Beispiel: Sagen wir, ich habe folgendes Caching für eine bestimmte Methode definiert:
@Cacheable(value = "myCache", key="{#myString}")
public SomeBusinessObject getFoo(String myString, int foo){
...
}
Jetzt Client A sendet "abc" (klein geschrieben) an den Controller. Der Controller ruft getFoo auf, und "abc" wird als Schlüssel verwendet, um ein Objekt in den Cache zu stellen. Client B sendet "abC" (Großbuchstabe C) und anstelle des zwischengespeicherten Objekts für den Schlüssel "abc" wird ein neues Cache-Objekt für den Schlüssel "abC" erstellt.
Wie kann ich vermeiden, dass die Groß- und Kleinschreibung beachtet wird? Das ist natürlich Arbeits
@Cacheable(value = "myCache", key="{#myString.toLowerCase()}")
public SomeBusinessObject getFoo(String myString, int foo){
...
}
:
Ich weiß, ich könnte der Cache-Schlüssel definieren, wie dies klein geschrieben werden. Aber ich suche nach einer allgemeineren Lösung. Ich habe viele Caches und viele Cache-Keys und mache einige @CacheEvict (s) und @CachePut (s) und wenn ich diesen "toLowerCase" -Ansatz verwenden würde, müsste ich immer sicherstellen, dass ich ihn nicht irgendwo vergessen werde.
Vielleicht ist dies nützlich, haben eine eigene KeyGenerator http://stackoverflow.com/questions/27574786/generating-unique-cache-key-with-spring-keygenerator-not-working – gaston
Ich glaube, Sie delegieren zu einer anderen Methode, die das tatsächliche Caching implementiert * nachdem * Sie gewünschte Änderungen an Schlüsseln vornehmen –