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

कुंजी समाप्ति पर रेडिस अपडेट सॉर्ट किया गया सेट

आप सही हैं आप क्रमबद्ध सेट मान पर ही "एक समाप्ति नहीं डाल सकते"।

लेकिन आप मुख्य कुंजी के साथ काम कर सकते हैं और समाप्ति होने पर ईवेंट को कैप्चर कर सकते हैं। इसे हासिल करने के लिए आपके पास कम से कम 2 तरीके हैं:

  • की स्पेस नोटिफिकेशन का उपयोग करना
  • रेडिस गियर्स का उपयोग करना

मुख्य स्थान सूचना

की स्पेस नोटिफिकेशन का उपयोग करके, आप EXPIRE ईवेंट को कैप्चर कर सकते हैं जो एक PUBLISH संदेश भेजेगा जिसे आप तब उपभोग कर सकते हैं।

मुझे मूल प्रवाह की व्याख्या करने दें:

सूचनाएं कॉन्फ़िगर करें

CONFIG SET notify-keyspace-events Ex
  • :चाबियों पर होने वाली घटनाएं
  • x :समाप्त हो चुकी घटनाओं को कैप्चर करें

अब आपका डेटाबेस __key*__:* . पर एक इवेंट प्रकाशित करेगा चैनल।

तो आप एक ऐसी सेवा बना सकते हैं जो इन घटनाओं को सुनें सेट को अपडेट करें (प्रत्यक्ष या अप्रत्यक्ष रूप से):

psubscribe __key*__:*

यदि आपके पास ऐसा एप्लिकेशन है जो निम्न मान और समाप्ति सेट करता है

set foo bar EX 5

आपको निम्न संदेश प्राप्त होना चाहिए

1) "pmessage"
2) "__key*__:*"
3) "[email protected]__:expired"
4) "foo"

रेडिस गियर्स

रेडिस गियर्स का उपयोग करके, आप उसी घटना को कैप्चर करते हैं (यह अधिसूचना पर भी आधारित है), लेकिन सीधे आपके रेडिस डेटाबेस में कोड लिखना आसान है।

आप निम्नानुसार गियर्स बना सकते हैं:(यह एक पायथन लिपि है, मैं इसे रेडिस पर तैनात करने के लिए रेडिसइनसाइट का उपयोग कर रहा हूं)

def process(x):
    execute('LPUSH', 'expired:keys', x['value']['key']);

# Capture an expiration event and adds it to 'expired:events' stream
cap = GB('KeysReader')
cap.foreach(lambda x:
            execute('XADD', 'expired:events', '*', 'key', x['key']))
cap.register(prefix='*',
             mode='sync',
             eventTypes=['expired'],
             readValue=False)

# Consume new messages from expiration streams and process them somehow
proc = GB('StreamReader')
proc.foreach(process)
proc.register(prefix='expired:*',
              batch=100,
              duration=1, 
              trimStream = False)

cap = GB('KeysReader') . द्वारा शुरू किए गए अनुभाग को देखें

  • यह किसी भी महत्वपूर्ण समाप्ति को सुनेगा prefix='*' &eventTypes=['expired']
  • समाप्ति के मामले में यह 'expired:events' में एक संदेश जोड़ देगा XADD कमांड का उपयोग कर रेडिस स्ट्रीम
  • फिर फ़ंक्शन को देखें proc = GB('StreamReader') जो धाराओं को संसाधित करेगा
  • हर बार जब कोई नया संदेश स्ट्रीम में आता है तो वह process() को कॉल करेगा समारोह।

आप इस फ़ंक्शन में सॉर्ट किए गए सेट को अपडेट करने के लिए अपना तर्क जोड़ सकते हैं। मेरे उदाहरण में मैंने अभी-अभी समाप्त हुई कुंजी को एक सूची में जोड़ा है।

मैं आपके प्रारंभिक प्रश्न से थोड़ा हटकर हूं।

ऐसा लगता है कि आप अपने डेटा के लिए किसी प्रकार की अनुक्रमणिका बनाने के लिए सॉर्ट किए गए सेट का उपयोग कर रहे हैं।

यदि ऐसा है, तो आपको RediSearch को देखना चाहिए, एक अन्य Redis मॉड्यूल जो आपको Hash को अनुक्रमित करने की अनुमति देता है फ़ील्ड और फिर कुछ उन्नत क्वेरी और एकत्रीकरण करने के लिए अनुक्रमणिका का उपयोग करें।

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

मैं आपको देखने के लिए आमंत्रित कर रहा हूं:

  • RediSearch मॉड्यूल
  • RediSearch प्रारंभ करना

क्षमा करें यदि यही कारण नहीं है कि आप सॉर्ट किए गए सेट का उपयोग कर रहे हैं, लेकिन मुझे लगता है कि यह जांचने योग्य है क्योंकि यदि आप आज इंडेक्स को मैन्युअल रूप से प्रबंधित करते हैं तो यह आपके एप्लिकेशन कोड को बहुत सरल बना सकता है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. फ्लशडीबी के साथ रेडिस कीस्पेस सूचनाएं

  2. रेल कस्टम वातावरण Resque.enqueue रोजगार पैदा नहीं करता है

  3. लारवेल इको सर्वर, रेडिस, सॉकेट.आईओ:उन्हें काम करने के लिए प्रतीत नहीं कर सकता

  4. रेडिस और वॉच + मल्टी समवर्ती उपयोगकर्ताओं को अनुमति देता है

  5. पायथन रेडिस इंटरैक्शन