Django-cachebot adalah aplikasi Django yang menyediakan caching otomatis dan pembatalan.
Instalasi
& Nbsp; 1. easy_install Django-cachebot atau pip menginstal Django-cachebot
& Nbsp; 2.
& Nbsp; Tambahkan cachebot ke INSTALLED_APPS Anda
& Nbsp; 3.
& Nbsp; Mengatur backend cache salah satu backends di cachebots.backends, misalnya:
& Nbsp; CACHE_BACKEND = 'cachebot.backends.memcached: //127.0.0.1: 11211 / timeout = 0'
Backends didukung saat ini adalah:
cachebot.backends.dummy
cachebot.backends.memcached
cachebot.backends.pylibmcd
Cachebot monyet patch default manajer Django dan queryset membuat CacheBotManager dan CachedQuerySet default digunakan oleh proyek Django Anda.
Penggunaan
Misalkan Anda memiliki permintaan yang tampak seperti ini dan Anda ingin cache:
Photo.objects.filter (user = user, status = 2)
Hanya menambahkan .cache () untuk rantai queryset seperti:
Photo.objects.cache (). Menyaring (user = user, status = 2)
Query ini akan mendapatkan diremehkan jika salah satu kondisi berikut terpenuhi:
1. Salah satu objek dikembalikan oleh query diubah.
2. Pengguna diubah.
3. Foto dimodifikasi dan memiliki status = 2.
4. Foto dimodifikasi dan memiliki user = pengguna.
Kriteria pembatalan ini mungkin terlalu berhati-hati, karena kita tidak ingin membatalkan cache ini setiap kali Foto dengan status = 2 disimpan. Untuk fine tune kriteria pembatalan, kita dapat menentukan hanya membatalkan pada bidang-bidang tertentu. Sebagai contoh:
Photo.objects.cache ('user'). Menyaring (user = user, status = 2)
Query ini akan mendapatkan diremehkan jika salah satu kondisi berikut terpenuhi:
1. Salah satu objek dikembalikan oleh query diubah.
2. Pengguna diubah.
3. Foto dimodifikasi dan memiliki user = pengguna.
Django-cachebot juga dapat menangani select_related, hubungan ke depan, dan reverse hubungan, yaitu:
Photo.objects.select_related (). Cache ('user'). Menyaring (user__username = "david", status = 2)
Photo.objects.cache ('user'). Menyaring (user__username = "david", status = 2)
Photo.objects.cache ('message__sender'). Menyaring (message__sender = user, status = 2)
Pengaturan
CACHEBOT_CACHE_GET default: Salah
jika CACHEBOT_CACHE_GET = Benar, semua pertanyaan objects.get akan otomatis di-cache. Ini dapat diganti pada tingkat manager seperti:
Foto kelas (models.Model):
& Nbsp; ...
& Nbsp; benda = models.Manager (cache_get = True)
CACHEBOT_CACHE_ALL default: Salah
jika CACHEBOT_CACHE_ALL = Benar, semua pertanyaan akan otomatis di-cache. Ini dapat diganti pada tingkat manager seperti:
Foto kelas (models.Model):
& Nbsp; ...
& Nbsp; benda = models.Manager (cache_all = True)
CACHE_PREFIX default: ''
Misalkan Anda memiliki pengembangan dan berbagi server memcached sama server produksi. Biasanya ini adalah ide yang buruk karena setiap server mungkin Timpa kunci cache server yang lain. Jika Anda menambahkan CACHE_PREFIX untuk pengaturan Anda, semua kunci Cache akan memiliki awalan ditambahkan ke mereka sehingga Anda dapat menghindari masalah ini.
Peringatan (Penting!)
& Nbsp; 1. Django-cachebot membutuhkan Django 1.2 atau lebih besar
& Nbsp; 2. Menambahkan / Menghapus objek dengan ManyRelatedManager tidak akan secara otomatis membatalkan. Hal ini karena sinyal untuk jenis operasi tidak dalam Django sampai 1,2. Sampai saat itu, Anda harus secara manual membatalkan pertanyaan ini seperti:
& Nbsp; dari cachebot.signals mengimpor invalidate_object
& Nbsp; user.friends.add (teman)
& Nbsp; invalidate_object (user)
& Nbsp; invalidate_object (teman)
& Nbsp; 3. count () query tidak akan mendapatkan cache.
& Nbsp; 4. Jika Anda membatalkan pada bidang yang berkisar atau mengecualikan query, query ini akan mendapatkan batal ketika sesuatu dalam perubahan tabel. Misalnya berikut ini akan mendapatkan batal ketika sesuatu di meja Pengguna berubah:
& Nbsp;. Photo.objects.cache ('user') menyaring (user__in = pengguna, status = 2)
& Nbsp;. Photo.objects.cache ('user') mengecualikan (user = user, status = 2)
& Nbsp; 5. Anda mungkin harus menggunakan alat seperti Django-memcache status untuk memeriksa status cache. Jika memcache overfills dan mulai menjatuhkan kunci, itu mungkin bahwa pertanyaan Anda tidak mungkin akan batal.
& Nbsp; 6. .values_list () tidak cache belum. Anda harus melakukan sesuatu seperti ini sebagai gantinya:
& Nbsp; [. Foto ['id'] untuk foto di Photo.objects.cache ('user') menyaring (user = user) .values ('id')]
& Nbsp; 7. Ada kemungkinan bahwa ada kasus tepi aku rindu. Django-cachebot masih dalam masa itu, sehingga Anda masih harus periksa bahwa pertanyaan Anda semakin cache dan valid. . Tolong beritahu saya jika Anda melihat ada perbedaan aneh
Persyaratan :
- Python
- Django
Komentar tidak ditemukan