2013-08-02 33 views
6

Tôi đang tạo ứng dụng bình với cơ sở dữ liệu Redis. Và tôi có một câu hỏi liên quanKết nối Redis Python nên được đóng trên mọi yêu cầu? (bình)

tôi có thể có kết nối Redis toàn cầu và giữ không đóng mọi thời đại:

init py

import os 
from flask import Flask 
import redis 

app = Flask(__name__) 

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

Ngoài ra tôi có thể kết nối lại mọi yêu cầu (Flask doc 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() 

Những phương pháp nào tốt hơn? Tại sao tôi nên sử dụng nó?

Cảm ơn sự trợ giúp!

+0

"Tốt hơn" là loại khó giải quyết và không thực sự là loại câu hỏi mà SO được thiết kế để trả lời. Ví dụ, bạn có nghĩa là "nhanh hơn", "an toàn hơn", "hiệu quả hơn"? Ngoài ra, bạn đang sử dụng cơ sở dữ liệu của mình như thế nào - bạn sẽ tạo ra loại yêu cầu nào và chúng là hướng dẫn đơn lẻ hay một loạt hướng dẫn? –

+0

Tốc độ và độ ổn định rất quan trọng của nó. Và cơ sở dữ liệu được sử dụng cho dữ liệu người dùng, như id người dùng, khóa công khai, khóa cá nhân và v.v. – KiraLT

Trả lời

16

Theo mặc định redis-py sử dụng kết nối tổng hợp. github wiki nói:

Phía sau cảnh, redis-py sử dụng hồ bơi kết nối để quản lý kết nối với máy chủ Redis. Theo mặc định, mỗi phiên bản Redis bạn tạo sẽ lần lượt tạo ra nhóm kết nối của riêng nó.

Điều này có nghĩa là đối với hầu hết các ứng dụng và giả định máy chủ redis của bạn nằm trên cùng một máy tính như ứng dụng bình của bạn, khó có khả năng "mở kết nối" cho từng yêu cầu sẽ gây ra bất kỳ vấn đề hiệu suất nào. Tác giả của Redis Py có suggested this approach:

a. tạo một cá thể máy khách redis toàn cầu và sử dụng mã của bạn.
b. tạo một nhóm kết nối toàn cầu và chuyển nó tới các phiên bản redis khác nhau trong suốt mã của bạn.

Ngoài ra, nếu bạn có nhiều hướng dẫn để thực hiện tại một thời điểm thì có thể xem giá trị pipelining vì điều này làm giảm thời gian quay lại và yêu cầu cho mỗi lệnh.

Các vấn đề liên quan