Làm cách nào để sử dụng redis với Django?


95

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

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

Câu trả lời:


72

Mô-đun Python 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ớ đệm RAM. Nó hỗ trợ GET và SET các phím cơ bản 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 vào bộ đệm các truy vấn RDBMS bằng cách lưu trữ đầu ra của chúng trong Redis. Mục tiêu là tăng tốc trang web Django của bạn. Không bắt đầu sử dụng Redis hoặc bất kỳ bộ đệm nào khác cho đến khi bạn cần tốc độ - đừng tối ưu hóa quá sớm.


Nhưng làm cách nào để kiểm tra xem bộ nhớ đệm trên redis có cần cập nhật không? Bạn có so sánh số lượng kỷ lục 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: redis.io/commands/ttl . Nếu khóa hết hạn, bạn phải chuyển đến DB. Vì vậy, nếu khóa nằm trong redis, thì 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ó en.wikipedia.org/wiki/Thundering_herd_problem , bạn muốn sử dụng en.wikipedia.org/wiki/Negative_cache và DB của bạn cần có en.wikipedia. org / wiki / Admission_control
Spike Gronim

4
Umm, à, a) Redis được thiết kế để không chỉ là bộ nhớ đệm RAM - nó bền bỉ (nhưng bao gồm các tính năng cho bộ nhớ cache), b) còn hơn cả lưu trữ khóa-giá trị đơn giản - có danh sách, bộ băm, v.v. với các thao tác tích hợp sẵn.
Olli

8
Thành thật mà nói, các đối tượng phản hồi / mô hình bộ nhớ đệm không nằm trong tình trạng tối ưu hóa quá sớm. Trừ khi bạn bị tính phí để làm như vậy (như trên heroku), việc lưu vào bộ nhớ cache ngay cả đối với các ứng dụng nhỏ cũng không ảnh hưởng gì.
vikki

1
Đó không phải là tốc độ, mà là về tài nguyên. Một bảng trong bộ nhớ cache sẽ ít tốn kém hơn.
dman

60

Chỉ vì Redis lưu trữ mọi thứ trong bộ nhớ không có nghĩa là nó được coi là một 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 lâu dài.

Việc nó có thể được sử dụng như một bộ nhớ cache là một gợi ý rằng nó hữu ích như một bộ lưu trữ hiệu suất cao. Nếu hệ thống Redis của bạn gặp sự cố, bạn có thể mất dữ liệu chưa đượ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ụ như một bản sao ở chế độ chờ nóng. Nếu dữ liệu của bạn là 'tối quan trọng', chẳng hạn như nếu 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 xã hội và quản lý xác suất mất dữ liệu ở mức khá chấp nhận được, thì Redis có thể đáng xem.

Dù sao, vấn đề vẫn còn, vâng, Redis có thể được sử dụng như một 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 từ Cassandra & Postgres. Số lượng các sản phẩm này (vài tỷ), tần suất chúng cần được thay đổi và chúng ta không bao giờ biết được những gì cần thiết vào bất kỳ thời điểm nào khiến chúng trở thành sản phẩm hoàn hảo cho redis. Ngoài ra, khi bạn đi trên một triệu hàng của bất cứ điều gì trong một db SQL, redis có thể là một nguồn tài nguyên miễn phí tuyệt vời cho thử nghiệm thành viên (ví dụ như là các thực thể trong lĩnh vực này?)
David

Không thể không tự hỏi tại sao câu trả lời của tôi chính xác cùng thời điểm vài tháng trước đó lại bị bạn nhảy vọt ... Ồ tốt.
ostergaard

22

Redis về cơ bản là một 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 nơi lưu trữ tạm thời, như bộ nhớ cache hoặc một nơi lưu trữ vĩnh viễn, như một cơ sở dữ liệu (với những lưu ý 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 trữ 'phản hồi' và phiên vào bộ nhớ cache.

Có một chương trình phụ trợ ở đâ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 rất hấp dẫn. (Định cấu hình maxmemory trên redis hoặc kết quả không quá hữu ích).


5

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 mình. Bạn có thể sử dụng nó như một nhà môi giới tin nhắn cho Celery hoặc Python RQ .


2

Redis làm cơ sở dữ liệu chính

Có, bạn có thể sử dụng kho khóa-giá trị của Redis làm cơ sở dữ liệu chính. Redis không chỉ lưu trữ các cặp khóa-giá trị, nó còn hỗ trợ các cấu trúc dữ liệu khác nhau như

  1. Danh sách
  2. Bộ
  3. Tập hợp đã sắp xếp
  4. Băm
  5. Bản đồ bit
  6. Hyperloglog

Redis Loại dữ liệu Tài liệu chính thức

Redis nằm trong bộ nhớ khóa-giá trị lưu trữ, vì vậy bạn phải biết nó nếu máy chủ Redis bị lỗi, dữ liệu của bạn sẽ bị mất.

Redis cũng có thể tiếp tục kiểm tra dữ liệu tài liệu chính thức.

Tài liệu chính thức của Redis Persistence


Redis as a Cache

Có Redis nằm giữa Django và RDBMS.

Làm thế nào nó hoạt động

given a URL, try finding that page in the cache if the page is in the cache: return the cached page else: generate the page save the generated page in the cache (for next time) return the generated page

Tài liệu chính thức về khung bộ nhớ cache của Django


Cách sử dụng Redis với Django

Chúng ta có thể sử dụng redis python client redis-py cho ứng dụng Django.

Ứng dụng khách trăn Redis redis-py Github

Chúng ta có thể sử dụng Django-redis cho chương trình phụ trợ bộ nhớ cache django.

Django-redis xây dựng trên redis-py và thêm các tính năng bổ sung liên quan đến ứng dụng django.

Django-redis doc Github

Các thư viện khác cũng tồn tại.


Redis các trường hợp sử dụng và kiểu dữ liệu

Một số trường hợp sử dụng

  • Bộ đệm phiên
  • Phân tích thời gian thực
  • Bộ nhớ đệm web
  • Bảng xếp hạng

Các trường hợp sử dụng Redis hàng đầu theo kiểu cấu trúc Dữ liệu cốt lõi


Các công ty công nghệ lớn sử dụng Redis

 Twitter GitHub Weibo Pinterest Snapchat Craigslist Digg StackOverflow Flickr 

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.