2015-04-18 8 views
5

में कैशिंग डेटा के लिए आम दृष्टिकोण मान लीजिए है मैं एक सेवा है जो टैग की एक सूची को पुन: प्राप्त है और मैं कैश में टैग की दुकान:क्या Angular.js

function TagsRetriever() { 

    var cache = $cacheFactory("tags"); 
    function getTags() { 
     var cached = cache.get("tags"); 
     if (cached) { 
      return cached; 
     } else { 
      return $http.get("url/getTags").then(function (tags) { 
       cache.put("tags", tags); 
      }); 
     } 
    } 
} 

आम दृष्टिकोण कैश रद्द करने के लिए क्या है? क्या मुझे इसकी वर्तमान तिथि से तुलना करनी चाहिए? क्या कोणीय कैश अमान्यता का कोई तंत्र प्रदान करता है?

और परिवर्तनीय होल्डिंग कैश के बजाय कैशफ़ैक्टरी का उपयोग करने का क्या फायदा है?

+2

हम इसे बिल्कुल अमान्य नहीं करते हैं। प्रारंभ करने के बाद, हम वेबशॉट कनेक्शन के माध्यम से कैश को सिंक में रखते हैं। –

+0

@ ओलिवर साल्ज़बर्ग, दिलचस्प, धन्यवाद, उस दृष्टिकोण के बारे में पढ़ने के लिए कोई लिंक? –

+1

https://github.com/oliversalzburg/absync –

उत्तर

1

आप जाँच कर सकते हैं शानदार angular-cache जो आपको $ cacheFactory के साथ पहिया को पुन: आविष्कार करने से रोक देगा (यह सरल भंडारण के अलावा कुछ भी नहीं प्रदान करता है, कभी-कभी यह पर्याप्त है)।

CacheFactory('profileCache', { 
    maxAge: 60 * 60 * 1000 // 1 hour, 
    deleteOnExpire: 'aggressive', 
    onExpire: function (key, value) { 
    $http.get(key).success(function (data) { 
     profileCache.put(key, data); 
    }); 
    } 
}); 

और cacheFactory उपयोग करने का लाभ एक चर पकड़े कैश के बजाय क्या करना है:

कि यह कैसे कैश अमान्यकरण (मैनुअल से एक उदाहरण) संभालती है?

इसके अलावा यह टेस्टेबल सेवा स्थापित करता है जो LRU लागू करता है और आपको कोड की कुछ पंक्तियां बचाता है? कुछ भी तो नहीं।

2

कैशफ़ैक्टरी मूल रूप से आपको सेवा के रूप में स्मृति में सामान स्टोर करने के लिए एक स्थान देता है। यह कैश के साथ बातचीत करने के लिए एक इंटरफेस प्रदान करता है, और यह कहीं भी उपलब्ध है जब आप सेवा इंजेक्ट करते हैं।

यह अमान्यता के लिए कुछ विशिष्ट नहीं प्रतीत होता है। जब भी आप डालते हैं तो बस एक दिनांक कुंजी शामिल करें() और इसके खिलाफ जांचें।

ओलिवर का उपयोग भी उत्कृष्ट है। सॉकेट के माध्यम से कैश में डेटा स्ट्रीम करें और फिर कैश से प्राप्त करें। यदि आप इसे इस तरह से नहीं कर रहे हैं, तो आप एक सेवा बना सकते हैं जो कैश सत्यापन को संभालती है। सेवा को डेटा पास करें। यदि यह नया डेटा है, तो यह दिनांक कुंजी जोड़ता है। यदि यह मौजूदा डेटा है, तो तिथियों की तुलना करें।

यह निम्न विधियों है:

  • पुट, मिलता है, निकालने के लिए, removeAll, जानकारी,

वहाँ नष्ट वास्तव में यह करने के लिए ज्यादा नहीं है: Documentation