में महंगे वेब सेवा कॉल को कैश करने की सर्वोत्तम रणनीति मेरे पास एक साधारण Grails एप्लिकेशन है जिसे उपयोगकर्ता के सत्र (इंटरफ़ेस का उपयोग करते समय) के दौरान कई बार बाहरी वेब सेवा पर आवधिक कॉल करने की आवश्यकता होती है।Grails
मैं इस वेब सेवा प्रतिक्रिया को कैश करना चाहता हूं, लेकिन सेवा के परिणाम हर कुछ दिनों में बदलते हैं, इसलिए मैं इसे थोड़े समय के लिए कैश करना चाहता हूं (शायद दैनिक रीफ्रेश)।
Grails कैश प्लगइन "रहने के लिए समय" कार्यान्वयन का समर्थन करने के लिए प्रकट नहीं होता है, इसलिए मैं कुछ संभावित समाधानों की खोज कर रहा हूं। मैं जानना चाहता हूं कि प्लगइन या प्रोग्रामैटिक समाधान इस समस्या को सबसे अच्छी तरह से हल करेगा।
उदाहरण:
BuildConfig.groovy
plugins{
compile ':cache:1.0.0'
}
MyController.groovy
def getItems(){
def items = MyService.getItems()
[items: items]
}
MyService.groovy
@Cacheable("itemsCache")
class MyService {
def getItems() {
def results
//expensive external web service call
return results
}
}
अद्यतन
वहाँ कई अच्छे विकल्प थे। मैंने प्लगइन दृष्टिकोण के साथ जाने का फैसला किया कि बर्ट ने सुझाव दिया था। मैंने उपरोक्त कोड उदाहरण में मामूली परिवर्तनों के साथ नमूना उत्तर शामिल किया है ताकि दूसरों को कुछ ऐसा करने में मदद मिल सके। यह कॉन्फ़िगरेशन 24 घंटों के बाद कैश की समय सीमा समाप्त हो जाती है।
BuildConfig.groovy
plugins{
compile ':cache:1.1.7'
compile ':cache-ehcache:1.0.1'
}
Config.groovy
grails.cache.config = {
defaultCache {
maxElementsInMemory 10000
eternal false
timeToIdleSeconds 86400
timeToLiveSeconds 86400
overflowToDisk false
maxElementsOnDisk 0
diskPersistent false
diskExpiryThreadIntervalSeconds 120
memoryStoreEvictionPolicy 'LRU'
}
}
नवीनतम कैश प्लगइन का उपयोग करके, आप इसे समाप्त नहीं कर सकते: "चूंकि इस प्लगइन के साथ" रहने के लिए समय "कॉन्फ़िगर करने का कोई तरीका नहीं है, इसलिए सभी कैश किए गए आइटमों में कोई टाइमआउट नहीं होता है और जब तक कि JVM पुनरारंभ नहीं होता है (तब से बैकिंग स्टोर इन-मेमोरी है) या कैश आंशिक रूप से या पूरी तरह से साफ़ किया गया है (@CacheEvict या प्रोग्रामेटिक रूप से एनोटेटेड विधि या क्रिया को कॉल करके)। " – Gregg
उसने कहा, आपके पास एक क्रॉन नौकरी हो सकती है जो @CacheEvict का उपयोग करने वाली एक वेब सेवा को हिट करती है। यह कम से कम एक काम है। – Gregg
हां, मैंने उस दृष्टिकोण को माना है। इसे एक कदम आगे बढ़ाने के लिए, क्वार्ट्ज एप्लिकेशन के भीतर सबकुछ रखने के लिए क्रॉन को प्रतिस्थापित कर सकता है। मेरी इच्छा है कि कैश प्लगइन वसंत कैश प्लगइन की तरह काम करता है। – arcdegree