Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

सर्वर साइड पर JSON ऑब्जेक्ट्स को कैशिंग करना

आप memcached का उपयोग कर सकते हैं, लेकिन फिर से हर कोई आपको डेटाबेस सर्वर से टकराएगा। आपके मामले में, आप कह रहे हैं कि क्वेरी के परिणाम एक प्रकार के लगातार . हैं इसलिए यह आपकी वेब सेवा से JSON प्रतिक्रियाओं को कैश करने के लिए अधिक समझ में आता है।

यह एक अंतर्निहित कैश के साथ एक रिवर्स प्रॉक्सी का उपयोग करके किया जा सकता है। मुझे लगता है कि एक उदाहरण आपको सबसे ज्यादा मदद कर सकता है कि हम इसे जेट्टी (जावा) और एनजीआईएनएक्स के साथ कैसे करते हैं:

हमारे सेटअप में, हमारे पास एक जेट्टी (जावा) इंस्टेंस है जो हमारे मोबाइल क्लाइंट के लिए एपीआई की सेवा करता है। एपीआई लोकलहोस्ट पर सुन रहा है:8080/एपीआई और स्थानीय मैसकल डेटाबेस पर कुछ प्रश्नों से प्राप्त JSON परिणाम लौटा रहा है।

इस बिंदु पर, हम सीधे अपने ग्राहकों को एपीआई की सेवा दे सकते हैं, लेकिन यहां रिवर्स प्रॉक्सी आता है:

एपीआई के सामने 0.0.0.0:80/ (हर जगह, पोर्ट 80) से सुनने वाला एक एनजीआईएनएक्स वेबसर्वर बैठता है। यह कैश है। यदि यह विफल हो जाता है, तो यह इसे लोकलहोस्ट:8080/एपीआई से प्राप्त करता है, इसे अपने कैशे में रखता है और कैश में पाए गए नए मान की सेवा करता है।

लाभ:

  • आप अन्य NGINX उपहारों का उपयोग कर सकते हैं:कैश्ड JSON फ़ाइलों का स्वचालित GZIP संपीड़न
  • एनजीआईएनएक्स पर एसएसएल एंडपॉइंट टर्मिनेशन।
  • एनजीआईएनएक्स कार्यकर्ता आपको लाभान्वित कर सकते हैं, जब आपके पास बहुत अधिक कनेक्शन हों, सभी कैश से डेटा का अनुरोध कर रहे हों।
  • आप अपनी सेवा के अंतिम बिंदुओं को समेकित कर सकते हैं

कैशे-अमान्यता के बारे में सोचें:

आपको कैश-अमान्यता के बारे में सोचना होगा। आप एनजीआईएनएक्स को स्थानीयहोस्ट के लिए सभी HTTP 200 अनुरोधों के लिए एक सप्ताह के लिए कैश रखने के लिए कह सकते हैं:8080/एपीआई, या अन्य सभी HTTP स्थिति कोड के लिए 1 मिनट। लेकिन अगर समय आता है, जहां आप एक सप्ताह के भीतर एपीआई को अपडेट करना चाहते हैं, तो कैश अमान्य है, इसलिए आपको इसे किसी भी तरह से हटाना होगा या कैशिंग समय को एक घंटे या दिन में बदलना होगा (ताकि ज्यादातर लोग हिट हो जाएं कैश)।

हम यही करते हैं:जब कैश गंदा होता है, तो हमने उसे हटाना चुना। हमारे पास सर्वर पर एक और जॉब चल रहा है जो अपडेट-एपीआई इवेंट को सुन रहा है कठपुतली के माध्यम से ट्रिगर। JOB हमारे लिए NGINX कैश को साफ़ करने का ध्यान रखेगा।

एक अन्य विचार यह होगा कि आप अपनी वेब सेवा के अंदर समाशोधन कैश फ़ंक्शन को जोड़ें। हमने इस समाधान के खिलाफ निर्णय लेने का कारण यह है:वेब सेवा को यह जानना होगा कि यह एक रिवर्स प्रॉक्सी के पीछे चलती है, जो चिंताओं को अलग करती है। लेकिन मैं कहूंगा, यह इस बात पर निर्भर करता है कि आप क्या योजना बना रहे हैं।

एक और बात, जो आपकी वेब सेवा को अधिक दाएं बना देगी प्रत्येक JSON फ़ाइल के साथ सही ETAG और कैशे-एक्सपायर हेडर की सेवा करना होगा। फिर से, हमने ऐसा नहीं किया, क्योंकि हमारे पास प्रत्येक फ़ाइल के लिए छोटे अपडेट इवेंट के बजाय एक बड़ा अपडेट इवेंट है।

साइड नोट:

  • आपको एनजीआईएनएक्स का उपयोग करने की आवश्यकता नहीं है, लेकिन इसे कॉन्फ़िगर करना वास्तव में आसान है
  • एनजीआईएनएक्स और अपाचे में एसएसएल समर्थन है
  • प्रसिद्ध रिवर्स प्रॉक्सी (https://www.varnish-cache.org) भी है, लेकिन मेरी जानकारी में यह एसएसएल (अभी तक?) नहीं करता है

इसलिए, यदि आप अपनी वेब सेवा + एसएसएल के सामने वार्निश का उपयोग करते हैं, तो आप एक कॉन्फ़िगरेशन का उपयोग करेंगे जैसे:एनजीआईएनएक्स -> वार्निश -> वेब सेवा।

संदर्भ:- एनजीआईएनएक्स सर्वर:http://nginx.com- वार्निश रिवर्स प्रॉक्सी:https://www.varnish-cache.org- कठपुतली आईटी ऑटोमेशन:https://puppetlabs.com- एनजीआईएनएक्स रिवर्स प्रॉक्सी ट्यूटोरियल:http:/ /www.cyberciti.biz/faq/howto-linux-unix-setup-nginx-ssl-proxy/ http://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MISCONF Redis को RDB स्नैपशॉट को सहेजने के लिए कॉन्फ़िगर किया गया है

  2. Redis Conf18 पर Rdbtools

  3. क्या redis incr कमांड विशिष्ट संख्या तक सीमित हो सकती है?

  4. रिक्त स्थान वाली कुंजियों का उपयोग करके रेडिस से मूल्य कैसे प्राप्त करें?

  5. phpredis एक्सटेंशन काम नहीं करता है, 'redis.so' लोड करने में असमर्थ