2013-10-26 5 views
9

का उपयोग कर कैश कुंजी को कैसे हटाया जाए, मैं रेडिस-रेल का उपयोग कर रहा हूं। कैश कुंजी के लिए मैं एक सरणी का उपयोग कर रहा: [: translated_attribute, आईडी self.class.name,]आंशिक मिलान

Rails.cache.fetch([self.class.name, :translated_attribute, id, field, I18n.locale]) do 
    self.read_attribute field, locale: I18n.locale 
end 

अब मैं के साथ महत्वपूर्ण मैचों के साथ सभी कैश निकालना होगा। मुझे पता है कि इसमें delete_matched है जो आंशिक मिलान के लिए कुंजी के बाद वाइल्डकार्ड (*) लेता है।

लेकिन मुझे नहीं पता कि सटीक कुंजी क्या उत्पन्न हुई है। अब मुझे पता होना चाहिए कि जब हम सरणी को कुंजी के रूप में उपयोग करते हैं तो यह कुंजी कैसे बनाता है। मेरा मतलब है कि अगर मैं [: foo,: bar,: dum] का उपयोग करता हूं तो कैश कुंजी कैश स्टोर में सटीक कुंजी क्या होगी?

उत्तर

22

डिफ़ॉल्ट रेल कैश कुंजी प्रारूप है: [वर्ग]/[आईडी] - [टाइमस्टैम्प]

मैं आमतौर पर उपयोग रेल न तो डिफ़ॉल्ट संचय कुंजी प्रारूप, बजाय मैं अपने कुंजी बनाने तो यह हेरफेर करने के लिए आसान होगा रेडिस में

cache_key = "#{self.class.name}/#{translated_attribute}/#{id}/#{field}/#{I18n.locale}" 

Rails.cache.fetch(cache_key) do 
    self.read_attribute field, locale: I18n.locale 
end 

Rails.cache.delete(cache_key) 
Rails.cache.delete_matched("#{self.class.name}*#{id}*") 
+1

यह डेटास्टोर के रूप में memcache के लिए काम नहीं करता है। कोई अन्य विकल्प? –

+0

उत्पादन में 'delete_matched' का उपयोग करने के बारे में सावधान: ' 'प्रदर्शन नोट: यह ऑपरेशन बड़े उत्पादन डेटाबेस के लिए खतरनाक हो सकता है, क्योंकि यह रेडिस" KEYS "कमांड का उपयोग करता है, जो कि ओ (एन) कुंजी की कुल संख्या पर है डेटाबेस में बड़े रेडिस कैश के उपयोगकर्ताओं को इस विधि से बचना चाहिए। ' http://www.rubydoc.info/gems/redis-activesupport/4.0.0/ActiveSupport%2FCache%2FRedisStore:delete_matched – DFish

संबंधित मुद्दे