2012-09-23 7 views
9

मैं एक node.js + एक्सप्रेस ऐप के लिए अपने सत्र स्टोर के रूप में redis का उपयोग कर रहा हूं ... क्या वे समाप्त होने के बाद पुराने सत्रों को स्वचालित रूप से हटा देंगे?मेरे पुराने express.js सत्रों को फिर से हटा देगा?

... या मुझे सर्वर की तरफ कुछ सफाई करने की ज़रूरत है? (ताकि डाटाबेस बहुत बड़ी भी नहीं बढ़ता है)

var RedisStore = require('connect-redis')(express) 

    app.use(express.session({ 
    store: new RedisStore({ 
     host: cfg.redis.host, 
     db: cfg.redis.db 
    }), 
    secret: 'foobar' 
    })); 

उत्तर

9

हाँ, connect-redis Redis अपने सत्र साफ जब वे समय सीमा समाप्त कर देगा।

यदि मुझे सही याद है, तो डिफ़ॉल्ट सत्र टाइमआउट 24 घंटे है जो मुझे मेमोरी में कुछ निष्क्रिय रखने के लिए काफी लंबा समय है, लेकिन आप इसे ttl पैरामीटर कॉन्फ़िगर करने के लिए पैरामीटर दे सकते हैं (सेकेंड में) आप कितनी देर तक चाहते हैं रेडिस उन्हें समाप्त होने से पहले रखे सत्र।

यदि आप अपने लिए यह सुनिश्चित करना चाहते हैं कि रेडिस आपके लिए चीजों को साफ कर ले, तो टाइमआउट को 30 सेकंड तक सेट करें और टाइमआउट की समयसीमा समाप्त होने के बाद रेडिस में एक नज़र डालें;

app.use(express.session({ 
    store: new RedisStore({ 
    host: cfg.redis.host, 
    db: cfg.redis.db, 
    ttl: 30 
    }), 
    secret: 'foobar' 
})); 

ttl विकल्पों here उल्लेख किया गया है और वहाँ यह कैसे अन्य विकल्प here साथ सूचना का आदान पर कुछ मामूली अतिरिक्त विस्तार है।

+0

मैं अपने कुकी सेट 2 सप्ताह के बाद समाप्त करने के लिए, मैं 2 सप्ताह के लिए भी टीटीएल बदलने के लिए तो वे redis से बाहर हटा दिया जाता है नहीं है की जरूरत है? – chovy

+0

@chovy हां, यदि आप वास्तव में चाहते हैं कि रेडिस सत्रों को 2 सप्ताह तक स्मृति में रखें, तो आपको ऐसा करने की आवश्यकता होगी। आप कुछ प्रकार के हाइब्रिड सत्र स्टोरेज को देखना चाहते हैं, हालांकि, रेडिस में सत्रों को बनाए रखना जो पिछले कुछ घंटों से सक्रिय हैं और उनसे सत्रों के लिए डिस्क पर संग्रहीत करना कुछ स्मृति को बचाने के लिए एक अच्छा विचार हो सकता है। –

+0

दूसरे लिंक में, "जोड़ा गया ttl विकल्प, जो कुकी maxAge से पहले आता है, द्वारा लेखक का क्या मतलब है। अब सत्र ttl (options.ttl, cookie.maxAge, oneDay) जो भी पहले परिभाषित किया गया है।" - क्या इसका मतलब है कि यह ttl.maxAge भी सेट करने के लिए ttl सेट करेगा? – chovy

4

यह अपेक्षा के अनुसार काम कर रहा है। यदि मैं ब्राउज़र-केवल सत्र करता हूं (उपयोगकर्ता-एजेंट बंद होने पर कुकी समाप्त हो जाता है) तो यह 24 घंटे के लिए रेडिस में रहता है (मैंने कनेक्ट-रेडिस में एक टीटीएल विकल्प सेट नहीं किया है)।

यदि मैं 2 सप्ताह में समाप्त होने के लिए कुकी सेट करता हूं, तो यह 14 दिनों के लिए रेडिस में रहता है।

आप इन आदेशों के साथ देख सकते हैं:

start redis-cli 
> keys * 
> ttl <key> 
संबंधित मुद्दे