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

nginx/uwsgi सर्वर के लिए लगातार इन-मेमोरी पायथन ऑब्जेक्ट

आप जो सुझाव दे रहे हैं वह सीधे संभव नहीं है। चूंकि नई प्रक्रियाओं को आपके नियंत्रण से बाहर किया जा सकता है, इसलिए मूल पायथन डेटा को स्मृति में रखने का कोई तरीका नहीं है।

हालांकि, इसके लिए कुछ तरीके हैं।

अक्सर, आपको केवल एक स्तर की कुंजी-मूल्य संग्रहण की आवश्यकता होती है। और कभी-कभी, मानों के लिए निश्चित आकार के बफ़र्स (जिसे आप सीधे str . के रूप में उपयोग कर सकते हैं) /bytes /bytearray वस्तुएं; कुछ और जो आपको चाहिए struct वहां या अन्यथा क्रमबद्ध करें) आपको बस इतना ही चाहिए। उस स्थिति में, यूडब्ल्यूएसजीआई का अंतर्निहित कैशिंग ढांचा आपकी जरूरत की हर चीज का ख्याल रखेगा।

यदि आपको अधिक सटीक नियंत्रण की आवश्यकता है, तो आप देख सकते हैं कि SharedArea के शीर्ष पर कैश कैसे कार्यान्वित किया जाता है और कुछ अनुकूलित करें। हालांकि, मैं इसकी अनुशंसा नहीं करता। यह मूल रूप से आपको उसी प्रकार का एपीआई देता है जो आपको फ़ाइल के साथ मिलता है, और केवल फ़ाइल का उपयोग करने पर एकमात्र वास्तविक लाभ यह है कि सर्वर फ़ाइल के जीवनकाल का प्रबंधन करेगा; यह सभी यूडब्ल्यूएसजीआई समर्थित भाषाओं में काम करता है, यहां तक ​​कि वे भी जो फाइलों की अनुमति नहीं देते हैं; और यदि आपको बाद में आवश्यकता हो तो यह आपके कस्टम कैश को एक वितरित (बहु-कंप्यूटर) कैश में माइग्रेट करना आसान बनाता है। मुझे नहीं लगता कि इनमें से कोई भी आपके लिए प्रासंगिक है।

फ्लैट की-वैल्यू स्टोरेज प्राप्त करने का एक और तरीका है, लेकिन निश्चित आकार के बफर के बिना, पायथन के stdlib anydbm के साथ है . की-वैल्यू लुकअप उतना ही पाइथोनिक है जितना इसे मिलता है:यह बिल्कुल dict . जैसा दिखता है , सिवाय इसके कि यह एक ऑन-डिस्क BDB (या समान) डेटाबेस में बैकअप है, मेमोरी में उपयुक्त के रूप में कैश किया गया है, बजाय इन-मेमोरी हैश तालिका में संग्रहीत किए जाने के।

यदि आपको कुछ अन्य सरल प्रकारों को संभालने की आवश्यकता है - कुछ भी जो तेजी से अन/अचार करने के लिए तेज़ है, जैसे int s—आप shelve . पर विचार करना चाह सकते हैं .

यदि आपकी संरचना पर्याप्त कठोर है, तो आप शीर्ष स्तर के लिए कुंजी-मान डेटाबेस का उपयोग कर सकते हैं, लेकिन मानों को ctypes.Structure के माध्यम से एक्सेस कर सकते हैं। , या struct . के साथ de/serialize करें . लेकिन आमतौर पर, यदि आप ऐसा कर सकते हैं, तो आप शीर्ष स्तर को भी समाप्त कर सकते हैं, जिस बिंदु पर आपकी पूरी चीज सिर्फ एक बड़ी Structure है। या Array .

उस समय, आप भंडारण के लिए केवल एक सादे फ़ाइल का उपयोग कर सकते हैं—या तो mmap यह (ctypes . के लिए ), या बस open और read यह (struct . के लिए )

या multiprocessing . का उपयोग करें साझा किया गया ctypes आपके Structure तक पहुंचने के लिए ऑब्जेक्ट सीधे साझा स्मृति क्षेत्र से बाहर।

इस बीच, यदि आपको वास्तव में हर समय सभी कैश डेटा की आवश्यकता नहीं है, बस बिट्स और टुकड़ों को हर बार एक बार में, डेटाबेस के लिए ठीक यही है। फिर से, anydbm , आदि आप सभी की आवश्यकता हो सकती है, लेकिन यदि आपके पास जटिल संरचना है, तो एक ईआर आरेख बनाएं, इसे तालिकाओं के एक सेट में बदल दें, और MySQL जैसी किसी चीज़ का उपयोग करें।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. रेडिस में लेनदेन और घड़ी का बयान

  2. रेडिस में कुशलता से अरबों डेटा कैसे सम्मिलित करें?

  3. Node.js . से रेडिस का उपयोग कैसे करें

  4. रेडिस - क्रूड रिपोजिटरी सेव पर कुंजी HASH और SET और ZSET कैसे संबंधित हैं?

  5. समयबाह्य प्रदर्शन SET {कुंजी}, इंस्ट:0, mgr:निष्क्रिय, कतार:2, qu=1, qs=1, qc=0, wr=1/1, in=0/0