क्या रेडिस डेटा जारी रखता है?


122

मैं समझता हूं कि Redis मेमोरी से सभी डेटा परोसता है, लेकिन क्या यह सर्वर रिबूट पर भी बना रहता है ताकि जब सर्वर रिबूट हो जाए तो यह डिस्क से सभी डेटा को मेमोरी में पढ़ ले। या क्या यह हमेशा एक खाली स्टोर है जो केवल डेटा को स्टोर करने के लिए है जबकि ऐप बिना किसी दृढ़ता के साथ चल रहे हैं?


1
मुझे यकीन नहीं है कि अगर मैं आपके प्रश्न को सही ढंग से समझता हूं। आप स्नैपशॉट को डिस्क में सहेज सकते हैं और उस फ़ाइल से पढ़ सकते हैं, यदि आप ऐसा नहीं करते हैं तो रिबूट होने पर आपका रेडिस डेटाबेस खाली हो जाएगा।
Sefa

जवाबों:


82

मेरा सुझाव है कि आप इसके बारे में http://redis.io/topics/persistence पर पढ़ें । मूल रूप से आप गारंटीकृत दृढ़ता खो देते हैं जब आप केवल-इन-मेमोरी स्टोरिंग का उपयोग करके प्रदर्शन बढ़ाते हैं। ऐसे परिदृश्य की कल्पना करें जहां आप INSERT को स्मृति में रखते हैं, लेकिन इससे पहले कि यह डिस्क खोने की शक्ति को बरकरार रखता है। डेटा हानि होगी।

रेडिस तथाकथित "स्नैपशॉट" का समर्थन करता है। इसका मतलब यह है कि यह समय में कुछ बिंदुओं पर मेमोरी में व्हाट्स की पूरी कॉपी करेगा (उदाहरण के लिए हर पूरे घंटे)। जब आप दो स्नैपशॉट के बीच पावर खो देते हैं, तो आप अंतिम स्नैपशॉट और क्रैश के बीच के समय से डेटा खो देंगे (पावर आउटेज होना जरूरी नहीं है ..)। Redis डेटा सुरक्षा बनाम प्रदर्शन को ट्रेड करता है, जैसे अधिकांश NoSQL-DBs करते हैं।

अधिकांश NoSQL-डेटाबेस इस जोखिम को कम करने के लिए कई नोड्स के बीच प्रतिकृति की अवधारणा का पालन करते हैं। Redis को डेटाबेस के बजाय एक तेज़ कैश माना जाता है जो डेटा संगति की गारंटी देता है। इसलिए इसके उपयोग के मामले आम तौर पर वास्तविक डेटाबेस से भिन्न होते हैं: आप उदाहरण के लिए, स्टोर सत्र, प्रदर्शन काउंटर या जो कुछ भी इसमें बेजोड़ प्रदर्शन और क्रैश के मामले में कोई वास्तविक नुकसान नहीं है। लेकिन प्रसंस्करण के आदेश / खरीद इतिहास और इतने पर पारंपरिक डेटाबेस के लिए एक काम माना जाता है।


1
यदि आप डिफ़ॉल्ट दृढ़ता व्यवहार जोड़ सकते हैं तो यह बहुत अच्छा होगा। जैसे @Leonid Beschastny उत्तर।
येया

40

रेडिस सर्वर अपने सभी डेटा को समय-समय पर एचडीडी से बचाता है, इस प्रकार कुछ हद तक दृढ़ता प्रदान करता है।

यह निम्नलिखित मामलों में से एक में डेटा बचाता है:

  • समय-समय पर स्वचालित रूप से
  • जब आप मैन्युअल रूप से कमांड को कॉल करते हैंBGSAVE
  • जब लाली बंद हो रही है

लेकिन रेडिस में डेटा वास्तव में लगातार नहीं है, क्योंकि:

  • रेडिस प्रक्रिया के दुर्घटनाग्रस्त होने का मतलब है कि अंतिम बचत के बाद से सभी परिवर्तन खोना
  • BGSAVE ऑपरेशन केवल तभी किया जा सकता है जब आपके पास पर्याप्त रैम हो (अतिरिक्त रैम की मात्रा रेडिस डीबी के आकार के बराबर हो)

एनबी: BGSAVE रैम की आवश्यकता एक वास्तविक समस्या है, क्योंकि रेडिस तब तक काम करना जारी रखता है जब तक कि इसमें चलाने के लिए अधिक रैम न हो, लेकिन यह एचडीडी को डेटा की बचत बहुत पहले (लगभग 50% रैम पर) रोक देता है।

अधिक जानकारी के लिए Redis Persistence देखें ।


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

15

यह विन्यास की बात है। आपके पास Redis पर आपके डेटा का कोई भी, आंशिक या पूर्ण दृढ़ता नहीं हो सकती है। सबसे अच्छा निर्णय परियोजना की तकनीकी और व्यावसायिक जरूरतों से प्रेरित होगा।

दृढ़ता के बारे में रेडिस प्रलेखन के अनुसार आप अपने उदाहरण को समय-समय पर या प्रत्येक क्वेरी पर डिस्क में डेटा को संक्षेप में सहेजने के लिए सेट कर सकते हैं। वे दो रणनीतियां / विधियाँ प्रदान करते हैं AOF और RDB (तब के बारे में विवरण देखने के लिए प्रलेखन पढ़ें), आप हर एक को अकेले या एक साथ उपयोग कर सकते हैं।

यदि आप "दृढ़ता जैसी SQL" चाहते हैं, तो उन्होंने कहा:

सामान्य संकेत यह है कि यदि आप डेटा सुरक्षा की एक डिग्री चाहते हैं जो PostgreSQL आपको प्रदान कर सकता है, तो आपको दोनों दृढ़ता विधियों का उपयोग करना चाहिए।


7

उत्तर आम तौर पर हां है , हालांकि एक फुलर उत्तर वास्तव में इस बात पर निर्भर करता है कि आप किस प्रकार का डेटा संग्रहीत करने की कोशिश कर रहे हैं। सामान्य तौर पर, अधिक पूर्ण संक्षिप्त उत्तर है:

  • Redis लगातार स्टोरेज के लिए सबसे उपयुक्त नहीं है क्योंकि यह मुख्य रूप से प्रदर्शन केंद्रित है
  • Redis वर्तमान राज्य डेटा के विश्वसनीय इन-मेमोरी मेमोरी / कैशिंग के लिए वास्तव में अधिक उपयुक्त है , विशेष रूप से कई क्लाइंट / सर्वरों में उपयोग किए गए डेटा के लिए केंद्रीय स्रोत प्रदान करके स्केलेबिलिटी की अनुमति देने के लिए।

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

http://qnimate.com/redis-permanent-storage/


टी एल; डॉ

से सरकारी डॉक्स :

  • RDB दृढ़ता [डिफ़ॉल्ट] निर्दिष्ट अंतराल पर आपके डेटासेट के पॉइंट-इन-टाइम स्नैपशॉट करता है।
  • AOF दृढ़ता [स्पष्ट रूप से कॉन्फ़िगर करने की आवश्यकता है] सर्वर द्वारा प्राप्त प्रत्येक लेखन ऑपरेशन को लॉग करता है, जो मूल डेटासेट को फिर से संगठित करते हुए, सर्वर स्टार्टअप पर फिर से खेला जाएगा।

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


5

आप कोई भी दृढ़ता का चयन नहीं कर सकते। बेहतर प्रदर्शन करें लेकिन रेडिस बंद होने पर सभी डेटा खो जाते हैं।

Redis में दो दृढ़ता तंत्र हैं: RDB और AOF.RDB एक अनुसूचक वैश्विक स्नैपशॉट का उपयोग करता है और AOF MySql के समान एक एपैपेंड-ओनली लॉग फ़ाइल का अद्यतन लिखता है।

आप उनमें से एक या दोनों का उपयोग कर सकते हैं। जब रेडिस रिबूट करता है, तो यह आरडीबी फ़ाइल या एओएफ फ़ाइल पढ़ने से डेटा का निर्माण करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.