मैं एक MySQL डेटाबेस में डेटा से अपने पृष्ठों को उत्पन्न करने के लिए एक सिम्फनी 2 का उपयोग कर रहा हूं। अधिकांश सामग्री के लिए, उपयोगकर्ताओं को प्रमाणीकृत होना पड़ता है लेकिन सामग्री स्वयं अक्सर बदलती नहीं है और उपयोगकर्ताओं के लिए अनुकूलित करने की आवश्यकता नहीं होती है। तो अभी भी ऑथ चेक बनाए रखने के दौरान डेटाबेस कॉल से बचने के लिए एक अच्छी कैशिंग रणनीति क्या है?ऑथ जानकारी बनाए रखने के दौरान उत्पन्न सामग्री की आक्रामक कैशिंग
उत्तर
मैं अंदर Zend_Cache का उपयोग करके इस हल के लिए उपयोग कर सकते हैं प्रस्तुत टेम्पलेट परिणाम को स्टोर करने के लिए कैश करने योग्य क्रियाएं। मैं फिर कैश की गई सामग्री से एक नया Response
ऑब्जेक्ट बना देता हूं। यदि कैश खाली है, तो मैं सामग्री उत्पन्न करता हूं।
मैंने एक प्लगइन बनाने का विचार किया जो एक एनोटेशन की जांच करता है और प्रतिक्रिया आउटपुट को स्वचालित रूप से संग्रहीत करता है लेकिन यह पता चला है कि मेरे पास केवल 3-4 डिस्प्ले क्रियाएं हैं जो कैशबल हैं और बहुत ही जटिल कैश आईडी निर्माण नियम हैं, इसलिए मैंने सीधे नियंत्रक कोड में कैशिंग तर्क।
बस शब्दों में विस्तारित अवधि के लिए SQL परिणाम-सेट को कैश करने के लिए मेमकैच का उपयोग करें।
ऐसा प्रतीत होता है कि आपके पास सिम्फनी http://www.symfony-project.org/book/1_2/12-Caching के साथ कैशिंग के लिए बहुत सारे विकल्प हैं (2 के लिए नहीं, लेकिन मेरा अनुमान बहुत कुछ नहीं बदला गया है)।
आप अपने स्वयं के लिपि में अपने भारी एसक्यूएल बयान कर दिया और कहा कि स्क्रिप्ट के लिए पर कैशिंग
list:
enabled: on
with_layout: false # Default value
lifetime: 86400 # Default value
इसके अलावा अगर आप यह सुनिश्चित करें कि उत्पन्न टैग थोड़ी देर के लिए आप सिम्फोनी इस्तेमाल कर सकते हैं के लिए नहीं बदलेगा बदल सकती है उपयोगकर्ता के ब्राउज़र को बताएं कि सामग्री के लिए अपने सर्वर को परेशान न करने के लिए जो पृष्ठ को उपयोगकर्ता के लिए लगभग तुरंत लोड करने का कारण बनता है।
$this->getResponse()->addCacheControlHttpHeader('max_age=1200'); // in seconds - less than 1 year seconds
बस सुनिश्चित करें कि अपनी अधिकतम उम्र काफी छोटा है कि जब कुछ बदल जाता है (जैसे कि एक कोड अद्यतन) है कि उपयोगकर्ता पुराने पेज के साथ अटक न जाए के बाद से वहाँ उन्हें फिर से उस पृष्ठ का अनुरोध करने के लिए मजबूर करने के कोई रास्ता नहीं है यूआरएल बदलने से कम।
यह सिम्फनी 1 के लिए है। – chiborg
हो सकता है कि यह बहुत बड़ा परिवर्तन हो सकता है, लेकिन निम्नलिखित योजना के मामले में उपयोगी हो सकता है:
पृष्ठों के कई समूहों से बनाएँ, के लिए नहीं अभी तक authed उपयोगकर्ताओं को एक (साइट जड़ में डाल देना) , और प्रमाणीकृत उपयोगकर्ताओं को जो एक ही सामग्री को देखना चाहिए (कहें, यह दो या अधिक को एक ही सामग्री को प्रमाणीकृत होने पर देखना चाहिए, फिर हम उन सभी के लिए केवल एक सेट बनाएंगे), और इसे निर्देशिका में डालें जड़ के नीचे फिर ऐसी 'for-authed-only' निर्देशिका के लिए सरल। Htaccess/.htpasswd फ़ाइलें बनाएं और फिर यह आपकी स्क्रिप्ट नहीं वाली वेबसर्वर की समस्या होगी।
आशा है कि आपको यह विचार मिल जाएगा। यह कहना अस्पष्ट है, लेकिन इसे लागू करना आसान होगा।
उदाहरण: कहें कि आप साइट पर केवल 'प्रमाणीकृत उपयोगकर्ताओं को पृष्ठ' /topsecret.html 'देखने की अनुमति देते हैं। डीआईआर (/ authed) बनाएं, उस पर HTTP-auth स्थापित करें, और अपने topsecret.html को डीआईआर में डालें (इसलिए यह '/authed/topsecret.html' होगा)। अब '/topsecret.html' संपादित करें और इसे 'माफ करना, कृपया प्रमाणित करें' लिंक के साथ अपनी मुख्य सामग्री को सरल बनाएं जो '/authed/topsecret.html' पर इंगित करेगा।
यदि आप सिम्फनी 2 का उपयोग करते हैं, तो आप Doctrine2 का उपयोग कर रहे हैं यदि आप Doctrine2 का उपयोग करते हैं, तो कैशिंग को डिफ़ॉल्ट रूप से सक्षम किया जाना चाहिए।
अपने उद्देश्यों के लिए अपने कैश ड्राइवर का चयन करें और कोई समस्या नहीं होनी चाहिए। आप विशेष रूप से query result caching में रुचि भी ले सकते हैं।
मेटाडेटा और क्वेरी कैश के बिना सिद्धांत का उपयोग न करें! सिद्धांत कैश के साथ काम करने के लिए अत्यधिक अनुकूल है। कैशिंग के लिए ऑप्टिमाइज़ किए गए सिद्धांत में मुख्य भाग मेटाडेटा मैपिंग जानकारी मेटाडेटा कैश और क्वेरी कैश के साथ SQL रूपांतरणों के साथ DQL में हैं।इन 2 कैशों को अभी तक केवल एक पूर्ण न्यूनतम स्मृति की आवश्यकता है वे सिद्धांत के रनटाइम प्रदर्शन में काफी सुधार करते हैं। सिद्धांत के साथ उपयोग करने के लिए अनुशंसित कैश ड्राइवर एपीसी है। एपीसी आप एक opcode-कैश के साथ प्रदान करता है (जो बहुत वैसे भी सिफारिश की है) और एक बहुत ही तेजी से इन-मेमोरी कैश भंडारण है कि आप मेटाडाटा और क्वेरी कैश
- 1. पूंजीकरण बनाए रखने के दौरान पाठ को कैसे बदलें?
- 2. पृष्ठभूमि छवि स्केलिंग पहलू अनुपात को बनाए रखने के दौरान
- 3. घटक को बनाए रखने के दौरान फॉर्म पारदर्शी कैसे बनाएं?
- 4. कैसे ListView की स्थिति बनाए रखने के
- 5. (बनाए रखने, nonatomic) और (nonatomic, बनाए रखने) कोई अंतर?
- 6. सामग्री रोटेशन के दौरान UIScrollView की ऑफसेट
- 7. web.config फ़ाइलों को बनाए रखने
- 8. बड़ी संख्या में धागे के साथ जावा ऐप को बनाए रखने के दौरान मुझे क्या जानने की आवश्यकता है?
- 9. सामग्री (टेक्स्ट और छवियों) को रखने के दौरान क्रॉस ब्राउज़र आरजीबीए पारदर्शी पृष्ठभूमि गैर-पारदर्शी
- 10. जावा सेट ऑर्डर बनाए रखने के लिए?
- 11. डॉक्सीजन, बनाए रखने के लिए बहुत भारी?
- 12. प्रदर्शन को बनाए रखने, फ़्लोटबफर की सामग्री को कैसे बदला जाए?
- 13. iTextSharp के साथ अभिविन्यास बनाए रखने के दौरान मैं पीडीएफ पेज कैसे स्केल करूं?
- 14. ग्राहक के खाते की शेष राशि को बनाए रखने का सबसे अच्छा तरीका
- 15. दृढ़ता अज्ञानता को बनाए रखने के दौरान समृद्ध डोमेन ऑब्जेक्ट्स कैसे बनाएं?
- 16. मानक हास्केल प्रकार के वर्गों को बनाए रखने की अपेक्षा रखने वाले कानून क्या हैं?
- 17. jQuery - प्रवाह लेआउट को बनाए रखने के दौरान अंदर/बाहर फीका आइटम
- 18. डिफ़ॉल्ट बनाए रखने के दौरान एक कस्टम रूपांतरण सेवा पंजीकृत करें?
- 19. विंडोज़ को कॉम क्लास की जानकारी कैशिंग से कैसे रोकें?
- 20. मुख्य लुकअप को बनाए रखने के दौरान जावास्क्रिप्ट ऑब्जेक्ट/सरणी को ऑर्डर कैसे किया जाए?
- 21. स्मृति रिसाव जब बनाए रखने संपत्ति
- 22. इस संपत्ति को 'बनाए रखने' की आवश्यकता क्यों है?
- 23. बाकी सामग्री वार्तालाप और कैशिंग
- 24. Obj-C __block चर व्यवहार को बनाए रखने
- 25. डीबगिंग के दौरान मैं क्यूटी ऑब्जेक्ट्स की सामग्री कैसे देखूं?
- 26. बड़ा स्कैला कोडबेस बनाए रखने योग्य है?
- 27. एसक्यूएलकनेक्शन को हमेशा बनाए रखने के लिए कैसे बनाए जा सकते हैं
- 28. नाम के साथ इतिहास रखने के दौरान गिट उपनिर्देशिका निकालें
- 29. initWithCoder में बनाए रखने का उपयोग करें?
- 30. सीएसएस सामग्री मूल्य में यूनिकोड चरित्र रखने
टीएफएम में कुछ सभ्य जानकारी है - http://symfony.com/doc/current/book/http_cache.html - मुझे लगता है कि ऐप कैश में आपके लिए आवश्यक सभी उपहार हैं, केवल यह जांचने की आवश्यकता हो सकती है कि अनुरोध प्रमाणित किया गया था या नहीं , या प्रतिक्रिया को कैश करने से पहले एक गैर-सार्वजनिक संसाधन के लिए। – smcphill
वह अपनी समस्या का समाधान नहीं करेगा। वह MySQL के लिए HTTP अनुरोधों के लिए क्वेरी कैश करने की तलाश में है। –