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
)
मुख्य कठिनाई यह सुनिश्चित करना है कि जब डेमॉन चुनाव करता है और वस्तुओं को संसाधित करता है तो कोई दौड़ की स्थिति नहीं होती है। इस प्रश्न का मेरा उत्तर देखें कि इसे कैसे लागू किया जा सकता है:
<ब्लॉकक्वॉट>सेशन एक्सपायर बेसिंग रेडिस को कैसे हैंडल करें?