2012-04-09 9 views
16

मैं PHP में सत्रों का उपयोग कर रहा हूं ताकि ट्रैक किया जा सके कि कोई उपयोगकर्ता लॉग इन है या नहीं। मैं इसका उपयोग उपयोगकर्ता के बारे में किसी भी अन्य डेटा को स्टोर करने के लिए नहीं करता; अनिवार्य रूप से यह हैश टेबल की जांच करना है कि यह देखने के लिए कि उपयोगकर्ता ने प्रमाणित किया है या नहीं।रेडिस बनाम देशी सत्र

मूल PHP सत्रों के बजाय रेडिस का उपयोग करने के लिए कुछ फायदा होगा?

मैं प्रदर्शन, मापनीयता और सुरक्षा (वास्तव में कोड जटिलता से संबंधित नहीं) के बारे में उत्सुक हूं।

+1

मुझे सच में नहीं लगता कि आपको सत्रों के बारे में ज्यादा चिंता करने की ज़रूरत नहीं है जब तक आपको यातायात की भारी मात्रा, PHP हैंडल सत्र अच्छी तरह से नहीं मिलते हैं, और यदि आप केवल उस छोटे डेटा को स्टोर करते हैं, तो यह बहुत से अनुरोधों के साथ भी ठीक होना चाहिए, और प्रदर्शन के बारे में यह करीब होना चाहिए, क्योंकि रेडिस PHP के मूल निवासी नहीं है। – gosukiwi

+0

@gosukiwi धन्यवाद! बड़े पैमाने पर आपका क्या मतलब है? एक बार में 10k उपयोगकर्ताओं की तरह, या 1 मिलीलीटर की तरह? मैं समझता हूं कि यह मेरी मशीन पर निर्भर करता है, लेकिन मैं यह देखने की कोशिश कर रहा हूं कि PHP में कुछ ऊपरी सीमा हो सकती है (जैसे कि यह प्रत्येक सत्र को एक व्यक्तिगत फ़ाइल के रूप में स्टोर करना था, जिससे इसे ओएस फाइल सिस्टम प्रदर्शन के अधीन बनाया गया हो)। – tau

+1

वैसे मैं उस मामले में सर्वर के स्मृति उपयोग के बारे में चिंता करता हूं, क्योंकि यह सभी 10k उपयोगकर्ताओं के साथ रैम में संग्रहीत है, यदि प्रत्येक उपयोगकर्ता सत्र के 1 केबी डेटा की तरह उपयोग करता है, तो यह 10,000 किलो या 10 ~ एमबी का उपभोग करेगा, जो नहीं है बहुत कुछ, PHP पर्याप्त मात्रा में डेटा संरचना को पकड़ने और त्वरित रूप से लिखने और पढ़ने के लिए पर्याप्त स्मार्ट है, समस्या यह है कि सत्र डेटा बहुत बड़ा है, या किसी कारण से सर्वर सत्र डेटा पढ़ने वाले बहुत से संसाधनों का उपभोग करता है, लेकिन यह सामान्य रूप से होता है यदि यह डेटा बहुत बड़ा है। – gosukiwi

उत्तर

-35

वहाँ देशी पीएचपी सत्र के बजाय redis का उपयोग करने के कुछ लाभ होगा?

प्रदर्शन - PHP सत्र बेहतर हैं। वे रेडिस से तेज होंगे क्योंकि नेटवर्क पर कुछ की बजाय रैम से इसकी पढ़ाई होती है।

स्केलेबिलिटी - रेडिस सत्र बेहतर हैं। PHP सत्र केवल एक मशीन पर काम करते हैं। यदि आपको अनुरोध करने के लिए एक से अधिक मशीनों की आवश्यकता है, तो आपको चिपचिपा सत्र लागू करना होगा। रेडिस के साथ, कई मशीनें सत्र स्थिति साझा कर सकती हैं। एक उपयोगकर्ता अनुरोध किसी भी समस्या के बिना किसी भी सर्वर पर जा सकते हैं।

स्थायित्व - यदि कोई वेब सर्वर किसी कारण से क्रैश हो जाता है, तो आप सभी सत्र स्थिति खो देंगे। रेडिस के साथ, आप विभिन्न दृढ़ता विकल्प प्राप्त कर सकते हैं। आप यह सुनिश्चित कर सकते हैं कि कोई विशेष रेडिस सर्वर

सुरक्षा - आप दोनों दृष्टिकोणों का उपयोग करके बड़ी सुरक्षा प्राप्त कर सकते हैं, और आप दोनों दृष्टिकोणों का उपयोग करके पूरी तरह गड़बड़ कर सकते हैं। सभी चीजें बराबर होती हैं, मैं कहूंगा कि PHP सत्र थोड़ा और सुरक्षित होंगे क्योंकि चिंता करने की एक कम चीज़ है।

+44

PHP सत्र रैम में संग्रहीत नहीं हैं लेकिन डिस्क पर फ़ाइलों के रूप में। और किसने आपको बताया कि वेबसर्वर पुनरारंभ होने पर वे खो गए हैं? – ThiefMaster

+0

@ थिफमास्टर - मुझे नहीं पता था कि PHP सत्र डिस्क पर संग्रहीत किए गए थे। उस ने कहा, स्थायित्व पर मेरा मुद्दा खड़ा है। यदि सर्वर क्रैश हो जाता है (जैसा कि पुनरारंभ करने के विपरीत है), तो आप अपना सत्र डेटा खो देते हैं। रेडिस या माईएसक्यूएल समर्थित सत्रों के साथ, आपके पास बेहतर स्थायित्व है। –

+9

तब भी आप उन्हें खोना नहीं चाहते हैं। जब तक ओएस क्रैश न हो और सत्र फ़ाइल क्षतिग्रस्त हो या वास्तव में हार्डडिस्क पर अभी तक लिखा नहीं गया हो। – ThiefMaster

0

मुझे सच में नहीं लगता कि आपको सत्रों के बारे में ज्यादा चिंता करने की ज़रूरत नहीं है जब तक आपको यातायात की भारी मात्रा, PHP हैंडल सत्र अच्छी तरह से नहीं मिलते हैं, और यदि आप केवल उस छोटे डेटा को स्टोर करते हैं, तो यह बहुत से अनुरोधों के साथ भी ठीक होना चाहिए, और प्रदर्शन के बारे में यह करीब होना चाहिए, क्योंकि रेडिस PHP के मूल निवासी नहीं है।

10k उपयोगकर्ताओं के साथ, यदि प्रत्येक उपयोगकर्ता सत्र के 1 केबी डेटा की तरह उपयोग करता है, तो यह 10,000 किलो या 10 ~ एमबी का उपभोग करेगा, जो अधिक नहीं है; PHP एक अच्छी पर्याप्त डेटा संरचना का उपयोग करने के लिए पर्याप्त स्मार्ट है और उन मानों को तुरंत लिखने और पढ़ने के लिए पर्याप्त है। समस्या यह है कि यदि सत्र डेटा बहुत बड़ा है, या किसी कारण से सर्वर सत्र डेटा पढ़ने वाले बहुत से संसाधनों का उपभोग करता है, लेकिन आमतौर पर यह डेटा बहुत बड़ा होता है।

11

आप सत्र हैंडलर बचाने तेजी से होना चाहता हूँ। यह इस तथ्य के कारण है कि एक PHP सत्र उसी उपयोगकर्ता से अन्य सभी समवर्ती अनुरोधों को अवरुद्ध कर देगा जब तक कि पहला अनुरोध समाप्त नहीं हो जाता।

कई प्रकार के हैंडलर आप एकाधिक सर्वरों में PHP सत्रों के लिए उपयोग कर सकते हैं: फ़ाइल डब्ल्यू/एनएफएस, माईएसQL डाटाबेस, मेमकैच, और रेडिस।

डेटाबेस विधि (इनो डीबी का उपयोग करके) मेरे अनुभव में फाइल डब्ल्यू/एनएफएस के बाद सबसे धीमी थी। विवाद को लॉक करना और लिखना मुख्य कारक हैं। मेमकेचे और रेडिस समान प्रदर्शन प्रदान करते हैं और अब तक बेहतर विकल्प हैं क्योंकि सभी परिचालन रैम में हैं। रेडिस मेरी पसंद है क्योंकि आप डिस्क दृढ़ता को सक्षम कर सकते हैं, और मेमकैच केवल स्मृति आधारित है।

यदि आप अधिक जानकारी चाहते हैं तो मैं Redis Sessions in PHP with Kohana समझाता हूं।

Redis Dashboard

12

सत्र के भंडारण के लिए Redis की तरह कुछ का उपयोग करते हुए एक शानदार तरीका लोड संतुलित सर्वर से बाहर अधिक प्रदर्शन प्राप्त करने के लिए है: यहाँ Redis कुंजी की देखभाल के लिए हमारे डैशबोर्ड है।

उदाहरण के लिए अमेज़ॅन वेब सेवाओं पर, लोड बैलेंसर्स को 'चिपचिपा सत्र' कहा जाता है। इसका अर्थ यह है कि जब कोई उपयोगकर्ता पहले आपके वेब ऐप से कनेक्ट होता है, उदा। इसमें लॉग इन करते समय, लोड बैलेंसर आपके ऐप सर्वरों में से एक का चयन करेगा और जब तक वे आपके एप्लिकेशन से बाहर नहीं निकलेंगे तब तक यह उपयोगकर्ता इस सर्वर से सेवा जारी रहेगा। ऐसा इसलिए है क्योंकि PHP द्वारा उपयोग किए जाने वाले सत्र, उदाहरण के लिए, ऐप सर्वर पर संग्रहीत किए जाएंगे जिन्हें वे पहले उपयोग करना शुरू करते हैं।

अब, यदि आप एक अलग सर्वर पर रेडिस का उपयोग करते हैं, तो अपने प्रत्येक ऐप सर्वर पर अपने PHP को रेडिस में अपने सत्रों को स्टोर करने के लिए कॉन्फ़िगर करें, तो आप इसे 'चिपचिपा सत्र' बंद कर सकते हैं। इसका मतलब यह होगा कि आपके कोई भी सर्वर सत्र तक पहुंच सकता है और इसलिए, उपयोगकर्ता को आपके ऐप के प्रत्येक अनुरोध के साथ एक अलग सर्वर से सेवा दी जा सकती है। यह अंततः आपके भार संतुलन सेट-अप के अधिक कुशल उपयोग के लिए बनाता है।

संबंधित मुद्दे