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

मैं बाइट्स को पूरी हेक्स स्ट्रिंग में कैसे परिवर्तित कर सकता हूं?

bytes . पर पुनरावृति करते समय मान, आपको पूर्णांक मिलते हैं; ये तुच्छ रूप से हेक्स नोटेशन में परिवर्तित हो जाते हैं:

def convert(value: bytes):
    return ''.join([f'\\x{b:02x}' for b in value])

ध्यान दें कि यह शाब्दिक बैकस्लैश, x . के साथ एक स्ट्रिंग उत्पन्न करता है वर्ण और हेक्साडेसिमल अंक वर्ण . यह अब bytes नहीं है मूल्य।

डेमो:

>>> print(convert(b'\x01\x02\x41'))
\x01\x02\x41

बस यह सुनिश्चित करने के लिए, आपको bytes के बारे में चिंता करने की आवश्यकता नहीं है मूल्य . repr() एक bytes . का प्रतिनिधित्व ऑब्जेक्ट हमेशा ASCII वर्णों का उपयोग करेगा जब बाइट मान एक मुद्रण योग्य ASCII कोडपॉइंट का होता है। इसका मतलब यह नहीं है कि मूल्य बदल गया है। b'\x01\x02\x41' b'\x01\x02A' . के बराबर है . Redis प्रोटोकॉल \x<HH> . के बारे में कुछ भी नहीं जानता है एस्केप सीक्वेंस, इसलिए उपरोक्त स्ट्रिंग को तार पर भेजने की कोशिश न करें।

आपके द्वारा उत्पन्न एस्केप अनुक्रम बैश शेल स्ट्रिंग अनुक्रम . हैं , और पायथन स्ट्रिंग्स की तरह, आपको एस्केप का उपयोग करने की आवश्यकता नहीं है . जैसा कि पायथन में है, स्ट्रिंग्स को बैश करने के लिए "\x01\x02A" और "\x01\x02\x41" समान मूल्य हैं। वे केवल तभी समझ में आते हैं जब आप कमांड लाइन पर कुंजी और मान स्ट्रिंग में गुजर रहे होते हैं, न कि उस टेक्स्ट फ़ाइल में जिसे आप redis-cli पर पाइप करते हैं ।

इसके अलावा, कृपया ध्यान दें कि redis-cli --pipe कमांड रॉ रेडिस प्रोटोकॉल इनपुट लेता है , रेडिस कमांड सिंटैक्स नहीं, रेडिस मास इंसर्शन . देखें दस्तावेज़ीकरण। यह प्रोटोकॉल नहीं करता है \xhh . का उपयोग करें अनुक्रम, क्योंकि यह शेल नोटेशन का उपयोग नहीं करता है।

इसके बजाय, कच्चे SET उत्पन्न करने के लिए निम्न फ़ंक्शन का उपयोग करें आदेश:

def raw_protocol(cmd: str, *args: bytes):
    return b'\r\n'.join([
        f'*{len(args) + 1}\r\n${len(cmd)}\r\n{cmd}'.encode(),
        *(bv for a in args for bv in (b'$%d' % len(a), a)),
        b''
    ])

SET के लिए कमांड, उपयोग करें raw_protocol('SET', keybytes, valuebytes) और इससे उत्पन्न होने वाले बाइनरी डेटा को बाइनरी मोड में खोली गई फ़ाइल में लिखें।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. विंडो नीला में सत्र दृढ़ता में मदद करने के लिए रेडिस कैसे काम करता है

  2. रेस्क्यू-शेड्यूलर नौकरी निकालने में विफल रहता है

  3. रेडिस में कई हैश प्राप्त करने का सबसे प्रभावी तरीका?

  4. रेडिस प्रतिकृति और रेडिस शार्डिंग (क्लस्टर) अंतर

  5. एक्शन केबल स्थानीय रूप से सदस्यता ले रहा है, लेकिन उसकेोकू पर नहीं