django-cachebot là một ứng dụng Django cung cấp bộ nhớ đệm tự động và chấm dứt hiệu lực.
Cài đặt
& Nbsp; 1. easy_install django-cachebot hoặc pips cài đặt django-cachebot
& Nbsp; 2.
& Nbsp; Thêm cachebot để INSTALLED_APPS của bạn
& Nbsp; 3.
& Nbsp; Thiết một phụ trợ bộ nhớ cache cho một trong các phần phụ trợ trong cachebots.backends, ví dụ:
& Nbsp; CACHE_BACKEND = 'cachebot.backends.memcached: //127.0.0.1: timeout 11211 / = 0'
Hậu phương hỗ trợ hiện nay là:
cachebot.backends.dummy
cachebot.backends.memcached
cachebot.backends.pylibmcd
Cachebot khỉ vá mặc định quản lý Django và queryset để làm CacheBotManager và CachedQuerySet mặc định được sử dụng bởi dự án Django của bạn.
Cách sử dụng
Giả sử bạn đã có một truy vấn mà nhìn như thế này và bạn muốn cache nó:
Photo.objects.filter (user = người sử dụng, tình trạng = 2)
Chỉ cần thêm .cache () để chuỗi queryset như vậy:
Photo.objects.cache (). Lọc (user = người sử dụng, tình trạng = 2)
Truy vấn này sẽ được vô hiệu nếu có các điều kiện sau đây được đáp ứng:
1. Một trong những đối tượng được trả về bởi các truy vấn được thay đổi.
2. Người sử dụng bị thay đổi.
3. Một hình ảnh được chỉnh sửa và có tư = 2.
4. Một hình ảnh được chỉnh sửa và có user = người dùng.
Đây tiêu chí huỷ bỏ hiệu lực có lẽ là quá thận trọng, bởi vì chúng tôi không muốn làm mất hiệu lực bộ nhớ cache này mỗi khi một hình ảnh với status = 2 được lưu. Để tinh chỉnh các tiêu chí chấm dứt hiệu lực, chúng tôi có thể xác định chỉ làm mất hiệu lực trên các lĩnh vực nhất định. Ví dụ như:
Photo.objects.cache (mã người dùng). Lọc (user = người sử dụng, tình trạng = 2)
Truy vấn này sẽ được vô hiệu nếu có các điều kiện sau đây được đáp ứng:
1. Một trong những đối tượng được trả về bởi các truy vấn được thay đổi.
2. Người sử dụng bị thay đổi.
3. Một hình ảnh được chỉnh sửa và có user = người dùng.
django-cachebot cũng có thể xử lý select_related, quan hệ về phía trước, và đảo ngược quan hệ, tức là:
Photo.objects.select_related (). Bộ nhớ cache (mã người dùng). Lọc (user__username = "David", status = 2)
Photo.objects.cache (mã người dùng). Lọc (user__username = "David", status = 2)
Photo.objects.cache ('message__sender'). Lọc (message__sender = người sử dụng, tình trạng = 2)
Cài đặt
CACHEBOT_CACHE_GET mặc định: False
nếu CACHEBOT_CACHE_GET = True, tất cả các truy vấn objects.get sẽ tự động được lưu trữ. Điều này có thể được ghi đè ở cấp quản lý như vậy:
lớp Ảnh (models.Model):
& Nbsp; ...
& Nbsp; đối tượng = models.Manager (cache_get = True)
CACHEBOT_CACHE_ALL mặc định: False
nếu CACHEBOT_CACHE_ALL = True, tất cả các truy vấn này sẽ tự động được lưu trữ. Điều này có thể được ghi đè ở cấp quản lý như vậy:
lớp Ảnh (models.Model):
& Nbsp; ...
& Nbsp; đối tượng = models.Manager (cache_all = True)
CACHE_PREFIX mặc định: ''
Giả sử bạn có một sự phát triển và chia sẻ các máy chủ memcached cùng máy chủ sản xuất. Bình thường, đây là một ý tưởng tồi vì mỗi máy chủ có thể được ghi đè lên các phím bộ nhớ cache của máy chủ khác. Nếu bạn thêm CACHE_PREFIX để thiết lập của bạn, tất cả các phím bộ nhớ cache sẽ có mà tiền tố gắn vào chúng để bạn có thể tránh được vấn đề này.
Hãy cẩn thận (quan trọng!)
& Nbsp; 1. django-cachebot đòi hỏi django 1.2 hoặc cao hơn
& Nbsp; 2. Thêm / Loại bỏ các đối tượng với một ManyRelatedManager sẽ không tự động mất hiệu lực. Điều này là bởi vì các tín hiệu cho các loại hình hoạt động không nằm trong Django cho đến 1.2. Cho đến lúc đó, bạn sẽ cần phải tự làm mất hiệu lực các truy vấn như vậy:
& Nbsp; từ cachebot.signals nhập invalidate_object
& Nbsp; user.friends.add (friend)
& Nbsp; invalidate_object (người sử dụng)
& Nbsp; invalidate_object (friend)
& Nbsp; 3. count () truy vấn này sẽ không được lưu trữ.
& Nbsp; 4. Nếu bạn đang làm vô hiệu về một lĩnh vực mà là trong một phạm vi hoặc loại trừ các truy vấn, các truy vấn này sẽ được chấm dứt hiệu lực khi bất cứ điều gì trong bảng thay đổi. Ví dụ sau đây sẽ bị mất hiệu lực khi bất cứ điều gì trên bảng của người dùng thay đổi:
& Nbsp;. Photo.objects.cache (mã người dùng) lọc (user__in = người dùng, status = 2)
& Nbsp;. Photo.objects.cache (mã người dùng) loại trừ (user = người sử dụng, tình trạng = 2)
& Nbsp; 5. Bạn có lẽ nên sử dụng một công cụ như django-memcache-trạng thái để kiểm tra trạng thái của bộ nhớ cache của bạn. Nếu memcache overfills và bắt đầu bỏ các phím, nó có thể là các truy vấn của bạn có thể không nhận được vô hiệu.
& Nbsp; 6. .values_list () không cache được nêu ra. Bạn nên làm một cái gì đó như thế này thay vì:
& Nbsp; [. Ảnh ['id'] cho ảnh trong Photo.objects.cache (mã người dùng) lọc (user = user) .values ('id')]
& Nbsp; 7. Có thể có những trường hợp cạnh tôi đã bỏ lỡ. django-cachebot vẫn còn trong giai đoạn trứng của nó, vì vậy bạn vẫn nên kiểm tra xem hai truy vấn của bạn đang nhận được lưu trữ và hết hiệu lực. . Xin vui lòng cho tôi biết nếu bạn nhận thấy bất kỳ sự khác lạ
Yêu cầu :
- Python
- Django
Bình luận không