2012-04-11 18 views
6

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

  • उपयोगकर्ता: USERNAME => {पासवर्ड: हैश, उम्र: 45}
  • उपयोगकर्ता: 0 => {उपयोगकर्ता नाम: उपयोगकर्ता नाम, पासवर्ड: हैश, उम्र: 45}

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

यह देखते हुए कि प्रत्येक उपयोगकर्ता नाम अद्वितीय है और इसे अल्फान्यूमेरिक होना चाहिए, क्या कोई विशेष कारण है कि यह आईडी सिस्टम का उपयोग करने के लिए फायदेमंद क्यों हो सकता है।

मुख्य कारण यह है कि मैं यह पूछता हूं क्योंकि मुख्य रूप से आईडी का उपयोग किया जाता है क्योंकि उन्होंने मेरे डेटाबेस में लुकअप टाइम्स को कम किया है, खासकर जब डेटाबेस को किसी तरह से सामान्यीकृत किया गया था। लेकिन रेडिस को यह लाभ नहीं मिला है और इसलिए मुझे आश्चर्य हुआ कि उपयोगकर्ता नामों के बजाय उपयोगकर्ता आईडी का उपयोग करने के अन्य कारण क्या हो सकते हैं।

किसी भी मदद के लिए धन्यवाद,

Pluckerpluck

पी.एस. रेडिस हैंडल हैंश के तरीके के कारण मैं वास्तव में दो तरीकों के बीच स्मृति अंतर के बारे में अनिश्चित हूं, इसलिए इस पर जानकारी अच्छी हो सकती है, हालांकि मैं जा सकता हूं और बाद में इसका परीक्षण कर सकता हूं।

उत्तर

13

आपके द्वारा परिभाषित उपयोग मामले में कोई फर्क नहीं पड़ता है, लेकिन पूर्णांक उपयोगकर्ता आईडी का उपयोग अन्य फायदे हैं।

जल्द या बाद में, आप अन्य ऑब्जेक्ट्स में उपयोगकर्ता आईडी को संदर्भित करना चाहते हैं। उदाहरण के लिए, "उपयोगकर्ता pluckerpluck के मित्र"।

friendsof:pluckerpluck -> SET{tom, dick, harry}

वी.एस.

friendsof:1 --> SET{2, 3, 4}

पूर्व दृष्टिकोण तत्वों स्टोर करने के लिए एक नियमित रूप से हैश तालिका का उपयोग करता है, और स्मृति का एक बहुत का उपयोग करता है - कि मॉडल के लिए, आपको दो विकल्प होगा। बाद वाला दृष्टिकोण एक पूर्णांक सरणी का उपयोग करता है और अत्यंत स्मृति कुशल है।

पूर्णांक के सेट के लिए यह विशेष एन्कोडिंग इंटसेट कहा जाता है। आप संपत्ति का उपयोग कर रेडिस के व्यवहार को नियंत्रित कर सकते हैं set-max-intset-entries

# Sets have a special encoding in just one case: when a set is composed 
# of just strings that happens to be integers in radix 10 in the range 
# of 64 bit signed integers. 
# The following configuration setting sets the limit in the size of the 
# set in order to use this special memory saving encoding. 
set-max-intset-entries 512 
+0

उस परिदृश्य को इंगित करने के लिए धन्यवाद। बस एक त्वरित सवाल: अगर मैं आईडी का उपयोग करना चाहता था। इसके बाद मुझे उपयोगकर्ता नाम खोजने की अनुमति देने के लिए उपयोगकर्ता नाम-आईडी संबंधों की आवश्यकता होगी। क्या आपको लगता है कि एक क्रमबद्ध सेट (आईडी होना रैंक) ऐसा करने का एक अच्छा तरीका होगा? या इसके बजाय एक हैश? – Pluckerpluck

+2

हैश दो कारणों से बेहतर है - ए) यह सॉर्ट किए गए सेट की तुलना में कम मेमोरी का उपयोग करता है, और बी) उपयोगकर्ताओं की कोई परिभाषित ऑर्डरिंग नहीं है, इसलिए अवधारणात्मक रूप से इसे सॉर्ट किए गए सेट का उपयोग करने में कोई समझ नहीं आता है। –

+0

मैं उपयोगकर्ता नामों को इंडेक्स करने के लिए हैश का उपयोग करूंगा। वे स्मृति में जेसेट की तुलना में अधिक कॉम्पैक्ट हैं। एक जेसेट का उपयोग केवल तभी उपयोगी होगा यदि आपको नामों पर रेंज क्वेरी का समर्थन करना पड़ा ... –