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

जावा के साथ क्रमबद्ध रेडिस कुंजी को कैसे ठीक करें

यदि आप जावा के साथ काम करते हैं और स्प्रिंग का उपयोग करते हैं, तो इस बात की पूरी संभावना है कि रेडिस में आपकी कुंजियाँ इस तरह दिखेंगी

\xac\xed\x00\x05t\x00\x0amyrediskey

रेडिस में कीज़ केवल स्ट्रिंग्स हो सकती हैं, लेकिन स्प्रिंग आपको जावा ऑब्जेक्ट्स को भी स्टोर करने देता है। डिफ़ॉल्ट रूप से, स्प्रिंग JDK सीरिएलाइज़र का उपयोग करके जावा ऑब्जेक्ट को रूपांतरित करेगा। JDK सीरिएलाइज़र उन \xac\xed... . को जोड़ता है `बाइट्स।

फिक्स आमतौर पर 1-लाइन परिवर्तन होता है - स्प्रिंग को StringRedisSerializer का उपयोग करने का निर्देश दें। लेकिन यह परिवर्तन केवल नई कुंजियों को प्रभावित करता है। रेडिस में मौजूदा कुंजियाँ बनी रहेंगी लेकिन जावा के लिए पहुँच योग्य नहीं रहेंगी।

यदि आपके पास पहले से ही उत्पादन में डेटा है, तो आपको और अधिक करने की आवश्यकता है। कुंजियों का नाम बदलने और बाइनरी डेटा से छुटकारा पाने का एक तरीका है।

Java Encoded Keys का नाम बदलें

हमने हाल ही में एक जावा स्क्रिप्ट जारी की है जो ऐसी चाबियों को स्वचालित रूप से ठीक करती है। हैशेडिन/रेडिस-रिनेम-जावा-एन्कोडेड-की देखें।

सामान्य दृष्टिकोण है:

  1. कुंजी स्कैन करें, और \xac\xed\x00\x05 से शुरू होने वाली कुंजियों को खोजें - जो जावा एन्कोडेड ऑब्जेक्ट्स के लिए सिग्नेचर है
  2. जावा ऑब्जेक्ट में डिसेरिएलाइज़ करने का प्रयास करें।
  3. यदि सफल हो, और यदि वस्तु स्ट्रिंग प्रकार की है, तो कुंजी का नाम बदलें
  4. यदि यह एक क्लस्टर है, तो नाम बदलें कुंजी काम नहीं करेगी। उस स्थिति में, नए नाम के तहत कुंजी को डंप और पुनर्स्थापित करें

इसे प्रोडक्शन में चलाना

  1. Jdk Serializer का उपयोग बंद करने के लिए आपको सबसे पहले कोड में बदलाव करना होगा
  2. इस बिंदु पर, रेडिस से पढ़ना विफल हो जाएगा, क्योंकि कोड क्रमबद्ध वस्तुओं की तलाश में है
  3. अब डेटा ठीक करने के लिए स्क्रिप्ट चलाना शुरू करें

भविष्य में सुधार

  1. डाउनटाइम को कम करने के लिए, आप डेटाबेस को स्कैन कर सकते हैं और सभी रीनेम कमांड को बफर कर सकते हैं। फिर कोड में बदलाव करें और एक ही बार में रीनेम कमांड को तुरंत चलाएं।
  2. क्लस्टर समर्थन में सुधार करें। वर्तमान में, आपको क्लस्टर में प्रत्येक मास्टर नोड के विरुद्ध चलना होगा

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. स्लेव रेडिस पर लिखें db

  2. BookSleeve से BGSAVE को कैसे कॉल करें?

  3. पायथन में रेडिस कनेक्शन पूल का उपयोग करने का सही तरीका

  4. मैं अपने रेडिसक्लाउड डीबी में डेटा का दूरस्थ रूप से निरीक्षण कैसे कर सकता हूं?

  5. अजवाइन हरा + पासवर्ड के साथ रेडिस कोई प्रामाणिक अपवाद नहीं फेंकता है