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

क्या क्लस्टर मोड में किसी विशिष्ट रेडिस इंस्टेंस पर एक विशिष्ट कुंजी का पता लगाने का कोई तरीका है?

आप कर सकते हैं, लेकिन यह तुच्छ नहीं है। सबसे पहले, रेडिस इसके शार्डिंग भाग को निर्धारित करने के लिए कुंजी में घुंघराले ब्रेसिज़ का उपयोग करता है, इसलिए आप एक कुंजी को संशोधित करने और इसे मनमाने ढंग से भेजने का निर्णय ले सकते हैं।

अब, आपको दो चीज़ें चाहिए:

  1. रेडिस इंस्टेंस में किस शार्ड या स्लॉट-रेंज का नक्शा रहता है।

  2. यह जानने का एक तरीका है कि कौन सा स्ट्रिंग किस स्लॉट में मैप करता है, ताकि आप अपनी कुंजी पर "शार्डिंग स्ट्रिंग" को एक विशिष्ट शार्ड पर रूट करने के लिए बाध्य कर सकें।

पहला आसान है - CLUSTER SLOTS आपको वह नक्शा देगा, बस इसे पार्स करें।

दूसरा वाला अधिक मुश्किल है - लेकिन सौभाग्य से मैंने यह काम पहले ही कर लिया है। मैंने रेडिस क्लस्टर में 16384 स्लॉट्स में से प्रत्येक के लिए कम से कम संभव अल्फ़ान्यूमेरिक स्ट्रिंग मैपिंग की एक तालिका बनाई है। मैं सी में नहीं हूं लेकिन आप इसे आसानी से जो कुछ भी परिवर्तित कर सकते हैं। https://gist.github.com/dvirsky/93f43277317f629bb06e858946416f7e

तो आपका एल्गोरिदम एक कुंजी और वांछित नोड दिया जाएगा:

  1. स्लॉट मैप को देखें और उस नोड पर रहने वाली स्लॉट रेंज लें।

  2. उस नोड की सीमा के भीतर एक स्लॉट का चयन करें।

  3. उस स्लॉट की प्रविष्टि के लिए शार्डिंग टेबल में देखें।

  4. उस स्ट्रिंग को कुंजी पर घुंघराले ब्रेसिज़ के साथ थप्पड़ मारो। जैसे कन्वर्ट foo करने के लिए foo{e4x} .

और बस! इस कुंजी का उपयोग करने वाला कोई भी आदेश उस शार्ड पर भेजा जाएगा।

इसका छद्म-अजगर संस्करण:

# Build this table from CLUSTER SLOTS or CLUSTER NODES
slots = {
   '127.0.0.1:7000': [(0, 1045),(2000,2100)]
   ...
 }

# Build this table from the C example:
sharding_table = ["06S", "Qi", "5L5", "4Iu", "4gY", ....]

def retarget_key(key, node):
    ranges = slots[node] 

    sharding_key = shading_table[ranges[0][0]]
    return '%s{%s}' % (key, sharding_key)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. AWS वर्चुअल प्राइवेट क्लाउड (VPC) में Redis™ के लिए स्केलग्रिड DBaaS परिनियोजित करें

  2. अंतिम स्ट्रीम में async फ़ंक्शन के कॉलबैक की प्रतीक्षा करें। ('डेटा') घटना

  3. CentOS 7 पर रेडिस स्थापित करना

  4. कुंजी के अस्तित्व के अनुसार रेडिस में हैश कुंजी की समाप्ति कैसे सेट करें

  5. क्या हम रेडिस में शामिल हो सकते हैं?