2012-06-05 23 views
16

कहें कि हमारे पास memcache या redis का कनेक्शन है ... कौन सी शैली को प्राथमिकता दी जाती है और क्यों?रूबी/रेल में वैश्विक या निरंतर चर का उपयोग करें?

MEMCACHE = Memcache.new(...) 
REDIS = Redis.new(...) 

या

$memcache = Memcache.new(...) 
$redis = Redis.new(...) 
+0

मैं इस बारे में सोच [CodeReview.SE] के लिए बेहतर फिट होगा। –

उत्तर

3

IMO एक "निरंतर", क्योंकि यह संचार कि यह होना करने के लिए ... लगातार अपेक्षा की जाती है।

ग्लोबल्स का मतलब यह नहीं है कि उन्हें उत्परिवर्तित नहीं किया जाना चाहिए।

+2

हां। विचार करने का एक और समाधान कक्षाओं को 'Memcache.connection' और' Redis.connection' जैसे कुछ शामिल करने के लिए हो सकता है, ('ActiveRecord :: Base.connection' की तरह थोड़ा) हालांकि यह उन लोगों के साथ कोड करने के लिए थोड़ा वर्बोज़ प्राप्त कर सकता है अगर उनका बहुत उपयोग किया जाता है, लेकिन इस तरह "स्थिरांक" उनके मूल से जुड़े होते हैं। – Casper

+0

@ कैस्पर शायद बेहतर विचार भी, हाँ। अतिरिक्त जानकारी के लिए –

9

वे समकक्ष संरचनाएं नहीं हैं। आपके आवेदन के आधार पर, वे अंतर-परिवर्तनीय हो सकते हैं या नहीं भी हो सकते हैं, लेकिन वे अर्थात् अलग हैं।

# MEMCACHE is a constant, subject to scoping constraints. 
MEMCACHE = Memcache.new(...) 

# $memcache is a global variable: declare it anywhere; use it anywhere. 
$memcache = Memcache.new(...) 
+1

+1 - अच्छा बिंदु। –

36

आप Redis.current अधिक जानकारी here

उपयोग करने के लिए उदाहरण के लिए, एक प्रारंभकर्ता में चाहते हो सकता है:

Redis.current = Redis.new(host: 'localhost', port: 6379) 

और फिर अपने अन्य वर्गों में:

def stars 
    redis.smembers("stars") 
end 

private 

def redis 
    Redis.current 
end 
+0

'वैश्विक चर परिचय न करें' का अच्छा समाधान। rubocop मणि द्वारा त्रुटियों। – leo

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