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

रेडिस, सत्र समाप्ति और रिवर्स लुकअप

Redis (2.6) . की वर्तमान रिलीज़ शाखा पर , आइटम की समय सीमा समाप्त होने पर आपके पास सूचनाएं नहीं हो सकतीं। यह संभवत:अगले संस्करणों के साथ बदल जाएगा।

इस बीच, अपनी आवश्यकता का समर्थन करने के लिए, आपको समाप्ति अधिसूचना समर्थन को मैन्युअल रूप से लागू करने की आवश्यकता है। तो आपके पास है:

session:<sessionid> -> a hash storing your session data - one of the field is <userid>
user:<userid> -> a set of <sessionid>

आपको sessionid remove को हटाना होगा सत्र समाप्त होने पर उपयोगकर्ता सेट से। तो आप एक अतिरिक्त क्रमबद्ध सेट बनाए रख सकते हैं जिसका स्कोर टाइमस्टैम्प है।

जब आप उपयोगकर्ता 100 के लिए सत्र 10 बनाते हैं:

MULTI
HMSET session:10 userid:100 ... other session data ...
SADD user:100 10
ZADD to_be_expired <current timestamp + session timeout> 10
EXEC

फिर, आपको एक डेमॉन बनाने की आवश्यकता है जो सत्र को समाप्त होने के लिए निर्धारित करने के लिए zset को मतदान करेगा (ZRANGEBYSCORE ) प्रत्येक समाप्त सत्र के लिए, उसे डेटा संरचना को बनाए रखना होगा:

  • ज़सेट से सत्र को पॉप आउट करें (ZREMRANGEBYRANK )
  • सत्र उपयोगकर्ता आईडी पुनर्प्राप्त करें (HMGET )
  • सत्र हटाएं (DEL )
  • उपयोगकर्ता आईडी सेट से सत्र निकालें (SREM )

मुख्य कठिनाई यह सुनिश्चित करना है कि जब डेमॉन चुनाव करता है और वस्तुओं को संसाधित करता है तो कोई दौड़ की स्थिति नहीं होती है। इस प्रश्न का मेरा उत्तर देखें कि इसे कैसे लागू किया जा सकता है:

<ब्लॉकक्वॉट>

सेशन एक्सपायर बेसिंग रेडिस को कैसे हैंडल करें?



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नोड.जेएस में रेडिस में पाइपलाइन कैसे करें?

  2. क्या मुझे फाइलों/मॉड्यूल के बीच रेडिस कनेक्शन साझा करना चाहिए?

  3. tcp डायल करें [::1]:6397:Connectex:कोई कनेक्शन नहीं बनाया जा सका क्योंकि लक्ष्य मशीन ने सक्रिय रूप से इसे अस्वीकार कर दिया था

  4. स्प्रिंग-बूट रेडिस:किसी उपयोगकर्ता के सभी सत्रों को अमान्य कैसे करें?

  5. Redis मैन्युअल रूप से init.d से शुरू होता है लेकिन स्टार्टअप पर नहीं