मैं @Cacheable के भीतर कैश कुंजी (ओं) को परिभाषित सर्वर पक्ष पर स्प्रिंग कैशिंग (EHCache के साथ) का उपयोग कर रहा हूं। समस्या यह है कि विभिन्न ग्राहक एक ही तार भेजते हैं जो विभिन्न वर्तनी वाले कुंजियों के रूप में उपयोग किए जाते हैं क्योंकि वे इसे केस संवेदनशील भेजते हैं। नतीजा यह है कि मेरे कैश में अधिक ऑब्जेक्ट्स होते हैं जो उन्हें करना होगा।वसंत कैश में केस संवेदनशील कुंजी से कैसे बचें?
उदाहरण: चलो कहते हैं कि मैं निम्नलिखित कैशिंग एक निश्चित विधि के लिए परिभाषित किया है दो:
@Cacheable(value = "myCache", key="{#myString}")
public SomeBusinessObject getFoo(String myString, int foo){
...
}
अब ग्राहक एक नियंत्रक के लिए "abc" (सभी लोअरकेस) भेजता है। नियंत्रक कॉल getFoo और "abc" को ऑब्जेक्ट को कैश में रखने के लिए कुंजी के रूप में उपयोग किया जाता है। क्लाइंट बी "एबीसी" (अपरकेस सी) भेजता है और कुंजी "एबीसी" के लिए कैश किए गए ऑब्जेक्ट को वापस करने के बजाय कुंजी "एबीसी" के लिए एक नया कैश ऑब्जेक्ट बनाया जाता है।
मैं केस संवेदनशील होने के लिए कुंजी से कैसे बच सकता हूं?
मैं जानता हूँ कि मैं निर्धारित कर सकते हैं कैश कुंजी इस तरह लोअरकेस जा करने के लिए:
@Cacheable(value = "myCache", key="{#myString.toLowerCase()}")
public SomeBusinessObject getFoo(String myString, int foo){
...
}
इस कोर्स काम करने की है। लेकिन मैं एक और सामान्य समाधान की तलाश में हूं। मेरे पास कई कैश और कई कैश कुंजी हैं और कुछ @CacheEvict (s) और @CachePut (ओं) करते हैं और यदि मैं उस "toLowerCase" दृष्टिकोण का उपयोग करता हूं तो मुझे हमेशा यह सुनिश्चित करना होगा कि इसे कहीं भी न भूलें।
हो सकता है कि यह उपयोगी है, है अपनी खुद की Keygenerator http://stackoverflow.com/questions/27574786/generating-unique-cache-key-with-spring-keygenerator-not-working – gaston
मुझे लगता है कि आप कर सकते हैं प्रतिनिधि वास्तविक कैशिंग को कार्यान्वित करने के लिए एक और विधि * * के बाद * आप कुंजी में वांछित संशोधन करते हैं –