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

रेडिस में एकाधिक कुंजी के लिए हैश में फ़ील्ड का नाम कैसे बदलें

मान लें कि आप चाहते हैं कि आपने अंडर_स्कोर के साथ फ़ील्ड का नामकरण शुरू किया हो, और टीम के किसी अन्य सदस्य ने कैमलकेस का उपयोग किया हो। अब आपका रेडिस हैश एक गड़बड़ है, और आप एक सम्मेलन से चिपके रहेंगे। आपको सभी हैश में फ़ील्ड का नाम बदलने का एक तरीका चाहिए।

Redis के पास हैश के भीतर फ़ील्ड का नाम बदलने का कोई तरीका नहीं है। लेकिन इससे भी महत्वपूर्ण बात यह है कि आपके द्वारा बनाए गए सभी हैश के लिए ऐसा करने का कोई तरीका नहीं है।

सौभाग्य से, गड़बड़ी को ठीक करने के लिए केवल एक छोटा कमांड लाइन जादू आवश्यक है।


यह आदेश पैटर्न उपयोगकर्ताओं से मेल खाने वाली कुंजियाँ ढूंढेगा:*, और फिर फ़ील्ड का नाम बदलें

  • creation_date to createDate
  • पोस्टटाइपिड से पोस्टटाइपआईडी
  • देखने के लिए देखें_गिनती
  • … और इसी तरह

गुम "hrename" कमांड

रेडिस के पास कोई हरानेम कमांड नहीं है, इसलिए हम पहले लुआ स्क्रिप्ट में एक लिखते हैं। यह आदेश एक ही हैश के भीतर फ़ील्ड का नाम बदल देगा।

evalsha <script-sha1-identifier> 1 <key> <old-field-1> <new-field-1>...


आपको पहले स्क्रिप्ट लोड करनी होगी। कमांड cat hrename.lua | redis-cli -x script load स्क्रिप्ट लोड करता है और एक SHA1 पहचानकर्ता देता है। जब भी आप स्क्रिप्ट का आह्वान करना चाहते हैं तो आप इस पहचानकर्ता का उपयोग कर सकते हैं।

एकाधिक हैश में फ़ील्ड का नाम बदलना

अब जब हमारे पास एक हैश को ठीक करने के लिए एक कमांड है, तो हमें इसे एक पैटर्न से मेल खाने वाले सभी हैश के लिए एक लूप में चलाने की आवश्यकता है। स्क्रिप्ट hash_bulk_rename_fields.sh बस यही करता है।

  1. सबसे पहले, हम redis-cli --scan --pattern <pattern> . का उपयोग करते हैं चाबियों की सूची प्राप्त करने के लिए, प्रति पंक्ति एक कुंजी।
  2. अगला, हम कुंजियों को grep . के माध्यम से पास करते हैं . रेडिस स्कैन कमांड रेगुलर एक्सप्रेशन को स्वीकार नहीं करता है, इसलिए हम स्कैन के साथ बुनियादी फ़िल्टरिंग करते हैं, और फिर ग्रेप के माध्यम से एक बेहतर रेगुलर एक्सप्रेशन प्रदान करते हैं।
  3. फिर हम प्रत्येक कुंजी के लिए एक awk स्क्रिप्ट चलाते हैं। यह अजीब स्क्रिप्ट थोड़ी जटिल है, इसलिए हम इसे तोड़ देंगे
  4. awk स्क्रिप्ट में एक कमांड टेम्प्लेट होता है evalsha <sha1> 1 __key__ <old field name> <new field name>.. . यह वह कमांड है जो सभी चाबियों के लिए चलेगी।
  5. प्रत्येक मिलान कुंजी के लिए, awk कमांड __key__ . को प्रतिस्थापित करता है वास्तविक कुंजी के साथ
  6. अगला, हम स्ट्रिंग कमांड को रेडिस प्रोटोकॉल प्रारूप में बदलते हैं। यह कच्चा प्रारूप है जिसे रेडिस समझता है।
  7. आखिरकार, हम -पाइप फ्लैग का उपयोग करके कच्चे कमांड को रेडिस-क्ली में पाइप करते हैं। रेडिस को बल्क कमांड भेजने का यह सबसे कारगर तरीका है।

इस स्क्रिप्ट को कस्टमाइज़ करना

  1. आप --pattern बदल सकते हैं और हैश प्रकार की कुंजियों का चयन करने के लिए grep कमांड
  2. आप अनुकूलित कर सकते हैं cmd_template उन फ़ील्ड को शामिल करने के लिए जिनका आप नाम बदलना चाहते हैं
  3. यदि आपका रेडिस सर्वर लोकलहोस्ट पर नहीं है, तो आपको होस्ट, पोर्ट और पासवर्ड दो बार देना होगा कमांड में, मूल रूप से जब भी आप रेडिस-क्ली कहते हैं।

यह भी देखें

  • स्कैन का उपयोग करके एकाधिक कुंजियों का नाम बदलें
  • किसी पैटर्न से मेल खाने वाली कुंजियां हटाएं
  • एक्सपायरी को कई चाबियों पर सेट करें
  • Redis के लिए RDBTools GUI आपको अपने बल्क कार्यों का पूर्वावलोकन करने देता है और Redis में डेटा प्रबंधित करने के लिए एक शक्तिशाली GUI प्रदान करता है। यह मुफ़्त डाउनलोड है!

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. रेडिस में 1 से अधिक कमांड होने पर क्या मुझे हमेशा पाइपलाइनिंग का उपयोग करना चाहिए?

  2. StackExchange.Redis के साथ क्षणिक नेटवर्क त्रुटियों को संभालना

  3. रेडिस - लुआ टेबल रिटर्न वैल्यू के रूप में - यह क्यों काम नहीं कर रहा है?

  4. JSON स्ट्रिंग के अक्रमांकन के दौरान नाम स्थान परिवर्तन को संभालना

  5. हैश को सुरक्षित रूप से कैसे लोड करें, और यदि यह मौजूद है तो मान को बूलियन में परिवर्तित करें