2013-08-02 8 views
6

मैं रेडिस डेटाबेस के साथ फ्लास्क ऐप बना रहा हूं। और मैं एक कनेक्शन सवाल हैप्रत्येक अनुरोध पर पायथन रेडिस कनेक्शन बंद होना चाहिए? (फ्लास्क)

मैं Redis कनेक्शन वैश्विक है और गैर-आप बंद हो हर समय रख सकते हैं:

init .py

import os 
from flask import Flask 
import redis 

app = Flask(__name__) 

db = redis.StrictRedis(host='localhost', port=6379, db=0) 

इसके अलावा, मैं फिर से कनेक्ट कर सकते हैं प्रत्येक अनुरोध (फ्लास्क दस्तावेज़ http://flask.pocoo.org/docs/tutorial/dbcon/):

init .py

import os 
from flask import Flask 
import redis 

app = Flask(__name__) 

#code... 

@app.before_request 
def before_request(): 
    g.db = connect_db() 

@app.teardown_request 
def teardown_request(exception): 
    db = getattr(g, 'db', None) 
    if db is not None: 
     db.close() 

जो विधि बेहतर है? मुझे इसका इस्तेमाल क्यों करना चाहिए?

सहायता के लिए धन्यवाद!

+0

"बेहतर" को संबोधित करना मुश्किल है और वास्तव में ऐसा प्रश्न नहीं है जिसे SO को उत्तर देने के लिए डिज़ाइन किया गया है। उदाहरण के लिए क्या आपका मतलब "तेज़", "सुरक्षित", "अधिक कुशल" है? साथ ही, आप अपने डेटाबेस का उपयोग कैसे कर रहे हैं - आप किस तरह के अनुरोध कर रहे हैं और क्या वे एकल निर्देश या निर्देशों की एक श्रृंखला हैं? –

+0

इसकी बहुत ही महत्वपूर्ण गति और स्थिरता। और डेटाबेस का उपयोग उपयोगकर्ता डेटा, जैसे उपयोगकर्ता आईडी, सार्वजनिक कुंजी, निजी कुंजी और आदि के लिए किया जाता है। – KiraLT

उत्तर

16

डिफ़ॉल्ट रूप से redis-py कनेक्शन पूलिंग का उपयोग करता है। github wiki कहता है:

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

इसका मतलब यह है कि ज्यादातर अनुप्रयोगों के लिए और अपने redis सर्वर माना आपके कुप्पी अनुप्रयोग, इसकी संभावना नहीं है कि प्रत्येक अनुरोध के लिए "एक कनेक्शन खोलने" किसी भी प्रदर्शन के मुद्दों पैदा करने के लिए जा रहा है के रूप में एक ही कंप्यूटर पर है। रेडिस पी के निर्माता suggested this approach:

ए। एक वैश्विक रेडिस क्लाइंट इंस्टेंस बनाएं और अपना कोड इसका उपयोग करें।
बी। एक वैश्विक कनेक्शन पूल बनाएं और अपने कोड में विभिन्न रेडिस उदाहरणों को पास करें।

ही, यदि आप निर्देश का एक बहुत किसी एक समय में निष्पादित करने के लिए है तो यह pipelining पर एक नज़र होने लायक के रूप में यह है कि आगे और पीछे समय प्रत्येक निर्देश के लिए आवश्यक कम कर देता है हो सकता है।

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