2010-09-27 32 views
84

Tôi đã nghe nói về redis-cache nhưng chính xác nó hoạt động như thế nào? Nó được sử dụng như một lớp giữa django và rdbms của tôi, bằng cách caching các truy vấn rdbms bằng cách nào đó?Làm cách nào để sử dụng redis với Django?

Hoặc nó có phải được sử dụng trực tiếp làm cơ sở dữ liệu không? Mà tôi nghi ngờ, kể từ khi trang github đó không bao gồm bất kỳ chi tiết đăng nhập, không có thiết lập .. chỉ cần nói với bạn để thiết lập một số tài sản cấu hình.

Trả lời

64

Python Module này cho Redis có một ví dụ sử dụng rõ ràng trong readme: http://github.com/andymccurdy/redis-py

Redis được thiết kế để trở thành một bộ nhớ cache RAM. Nó hỗ trợ GET và SET cơ bản của các khóa cộng với việc lưu trữ các bộ sưu tập như từ điển. Bạn có thể lưu các truy vấn RDBMS bằng cách lưu đầu ra của chúng trong Redis. Mục tiêu sẽ là tăng tốc trang web Django của bạn. Đừng bắt đầu sử dụng Redis hoặc bất kỳ bộ nhớ cache nào khác cho đến khi bạn cần tốc độ - đừng tối ưu hóa quá sớm.

+0

Nhưng làm thế nào để bạn kiểm tra bộ nhớ cache trên redis cần cập nhật? Bạn có so sánh số lượng bản ghi hoặc có cách nào tốt hơn không? – Marconi

+7

Điều này thường được thực hiện bằng cách đặt TTL cho khóa: http://redis.io/commands/ttl. Nếu khóa hết hạn, bạn phải đi đến DB. Vì vậy, nếu khóa là redis, sau đó bạn sử dụng nó. Lưu ý rằng việc triển khai đơn giản này gây ra một số vấn đề: khi một khóa phổ biến hết hạn, bạn có http://en.wikipedia.org/wiki/Thundering_herd_problem, bạn muốn sử dụng http://en.wikipedia.org/wiki/Negative_cache, và DB của bạn cần http://en.wikipedia.org/wiki/Admission_control –

+0

Bạn có thể xác định "Tương thích API" không? Giao thức chắc chắn là khác nhau. Để báo giá của tác giả Redis «Về cơ bản trong giao thức memcached độ dài của tải trọng là một trong các đối số được phân cách bằng dấu cách, trong khi giao thức Redis được bù đắp cố định (chỉ có ký tự" $ "trước đó)» (Nguồn: http: //antirez.com/post/redis-memcached-benchmark.html) Tuy nhiên, đó là sự thật vì cả hai đều là kho khóa/giá trị, nên khá đơn giản để thích ứng với mã sử dụng Memcached để sử dụng Redis thay thế. Đoán tốt nhất của tôi là, bạn có nghĩa là "bạn có thể thay thế một mô-đun/lớp khác", phải không? – jpetazzo

18

Redis về cơ bản là cửa hàng KV 'trong bộ nhớ' với vô số chuông và còi. Nó cực kỳ linh hoạt. Bạn có thể sử dụng nó như một cửa hàng tạm thời, như một bộ nhớ cache, hoặc một cửa hàng cố định, giống như một cơ sở dữ liệu (với sự cẩn thận như đã đề cập trong các câu trả lời khác).

Khi kết hợp với Django, trường hợp sử dụng tốt nhất/phổ biến nhất cho Redis có lẽ là để lưu lại 'phản hồi'.

Có một chương trình phụ trợ tại đây https://github.com/sebleier/django-redis-cache/ và tài liệu tuyệt vời trong tài liệu Django tại đây: https://docs.djangoproject.com/en/1.3/topics/cache/.

Gần đây, tôi đã bắt đầu sử dụng https://github.com/erussell/django-redis-status để theo dõi bộ nhớ cache của mình - hoạt động hấp dẫn. (Cấu hình maxmemory trên redis hoặc kết quả không phải là rất hữu ích).

58

Chỉ vì Redis lưu trữ mọi thứ trong bộ nhớ không có nghĩa là nó có nghĩa là bộ nhớ cache. Tôi đã thấy mọi người sử dụng nó như một kho lưu trữ dữ liệu liên tục.

Điều đó có thể được sử dụng làm bộ nhớ cache là gợi ý hữu ích khi lưu trữ hiệu suất cao. Nếu hệ thống Redis của bạn bị hỏng, bạn có thể mất dữ liệu không được ghi lại vào đĩa. Có một số cách để giảm thiểu những nguy hiểm như vậy, ví dụ: một bản sao dự phòng nóng. Nếu dữ liệu của bạn là 'nhiệm vụ quan trọng', giống như khi bạn điều hành một ngân hàng hoặc một cửa hàng, Redis có thể không phải là lựa chọn tốt nhất cho bạn. Nhưng nếu bạn viết một trò chơi có lưu lượng truy cập cao với dữ liệu trực tiếp liên tục hoặc một số nội dung tương tác trên mạng xã hội và quản lý xác suất mất dữ liệu là khá chấp nhận được thì Redis có thể đáng xem.

Dù sao, điểm vẫn còn, có, Redis có thể được sử dụng làm cơ sở dữ liệu.

+3

Đối với công ty của tôi, chúng tôi sử dụng Redis để lưu trữ tóm tắt và các sản phẩm được tạo ra từ Cassandra & Postgres. Số lượng của các sản phẩm này (vài tỷ), tần suất chúng cần phải thay đổi và chúng tôi không bao giờ biết những gì cần thiết vào bất kỳ thời điểm nào làm cho chúng phù hợp hoàn hảo với redis. Ngoài ra, một khi bạn đi trên một triệu hàng của bất kỳ thứ gì trong một db SQL, redis có thể là một tài nguyên miễn phí tuyệt vời để kiểm tra thành viên (ví dụ: Các thực thể này trong miền này?) – David

+0

Không thể không hiểu tại sao câu trả lời của tôi chỉ vài tháng trước đó đã bị bạn nhảy cóc ... Oh well. – ostergaard

4

Bạn cũng có thể sử dụng Redis làm hàng đợi cho các tác vụ được phân phối trong ứng dụng Django của bạn. Bạn có thể sử dụng nó làm nhà môi giới thư cho Celery hoặc Python RQ.

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