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

रेडिस में आईपी रेंज स्टोर करें

यह निर्भर करता है कि आप मानते हैं कि आपकी आईपी श्रेणियां ओवरलैप हो सकती हैं या नहीं। यदि नहीं, तो समाधान काफी सरल है:

  • प्रदाताओं का डेटा संग्रहीत करने के लिए हैश के संग्रह का उपयोग करें
  • अपनी श्रेणियों के अधिकतम मान को अनुक्रमित करने के लिए zset का उपयोग करें
  • (अद्वितीय) श्रेणी पुनर्प्राप्त करें जिसका अधिकतम मान किसी IP से अधिक है
  • जांचें कि इस श्रेणी का न्यूनतम मान IP से कम है

उदाहरण:

यहाँ मेरे प्रदाता हैं। उनमें से प्रत्येक की पहचान एक आईडी से की जाती है। कृपया ध्यान दें कि मैं प्रत्येक प्रदाता से जुड़ी और अधिक संपत्तियां जोड़ सकता हूं:

> hmset providers:1 name P1 min 3232235786 max 3232235826
OK
> hmset providers:2 name P3 min 1232235786 max 1232235826
OK
> hmset providers:3 name P3 min 2232235786 max 2232235826
OK
> hmset providers:4 name P4 min 4232235786 max 4232235826
OK

हर बार एक प्रदाता को सिस्टम में जोड़ा जाता है, एक इंडेक्स को बनाए रखा जाना चाहिए (मैन्युअल रूप से:यह रेडिस है, रिलेशनल डेटाबेस नहीं)। स्कोर अधिकतम मान है, सदस्य श्रेणी की आईडी है।

> zadd providers:index 3232235826 1 1232235826 2 2232235826 3 4232235826 4
(integer) 4
> zrange providers:index 0 -1
1) "2"
2) "3"
3) "1"
4) "4"

अब किसी IP पते के अनुरूप अद्वितीय श्रेणी को क्वेरी करने के लिए, आपको 2 राउंडट्रिप की आवश्यकता है:

> zrangebyscore providers:index 3232235787 +inf LIMIT 0 1
1) "1"
> hgetall providers:1
1) "name"
2) "P1"
3) "min"
4) "3232235786"
5) "max"
6) "3232235826"

फिर क्लाइंट प्रोग्राम को बस यह जांचना होगा कि आपका आईपी लौटाई गई सीमा के न्यूनतम पते से अधिक या बराबर है।

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. पेजकैश, डेंट्री, इनोड्स क्या हैं?

  2. RedisTemplate का उपयोग करके Redis से सेट मान प्राप्त करें

  3. फेय या रेडिस पबसुब

  4. रेडिस:डेटाबेस में संग्रहीत सभी मान लौटाएं

  5. रेडिस पब/सब ऑन रेल्स