django-cachebot เป็น app Django แคชที่ให้โดยอัตโนมัติและเป็นโมฆะ
การติดตั้ง
& nbsp; 1 easy_install django-cachebot หรือ PIP ติดตั้ง django-cachebot
& nbsp; 2
& nbsp; เพิ่ม cachebot เพื่อ INSTALLED_APPS ของคุณ
& nbsp; 3
& nbsp; ตั้งแคชแบ็กเอนด์ให้เป็นหนึ่งในแบ็กเอนด์ใน cachebots.backends เช่น:
& nbsp; CACHE_BACKEND = 'cachebot.backends.memcached: //127.0.0.1: 11211 / หมดเวลา = 0'
แบ็กเอนด์ได้รับการสนับสนุนในปัจจุบันคือ
cachebot.backends.dummy
cachebot.backends.memcached
cachebot.backends.pylibmcd
ลิง Cachebot แพทช์เริ่มต้นผู้จัดการ Django และ queryset เพื่อให้ CacheBotManager และ CachedQuerySet ค่าเริ่มต้นที่ใช้โดยโครงการ Django ของคุณ
การใช้งาน
สมมติว่าคุณมีแบบสอบถามที่มองเช่นนี้และคุณอยากแคชมัน
Photo.objects.filter (ผู้ใช้ผู้ใช้ = สถานะ = 2)
เพียงแค่เพิ่ม .cache () เพื่อโซ่ queryset ชอบโดย:
Photo.objects.cache (). กรอง (ผู้ใช้ = ใช้สถานะ = 2)
แบบสอบถามนี้จะได้รับการทำให้เป็นโมฆะหากมีเงื่อนไขใด ๆ ต่อไปนี้:
1. หนึ่งของวัตถุที่ส่งกลับโดยแบบสอบถามมีการเปลี่ยนแปลง
2. ผู้ใช้มีการเปลี่ยนแปลง
3. ภาพที่มีการแก้ไขและมีสถานะ = 2
4. ภาพที่มีการแก้ไขและมีการใช้งานของผู้ใช้ =
หลักเกณฑ์โมฆะนี้น่าจะระมัดระวังมากเกินไปเพราะเราไม่ต้องการที่จะทำให้การแคชนี้เวลาที่มีสถานะภาพ = 2 จะถูกบันทึกไว้ทุก การปรับเกณฑ์การทำให้เราสามารถระบุเพียงโมฆะในบางสาขา ตัวอย่างเช่น:
Photo.objects.cache (ผู้ใช้). กรอง (ผู้ใช้ = ใช้สถานะ = 2)
แบบสอบถามนี้จะได้รับการทำให้เป็นโมฆะหากมีเงื่อนไขใด ๆ ต่อไปนี้:
1. หนึ่งของวัตถุที่ส่งกลับโดยแบบสอบถามมีการเปลี่ยนแปลง
2. ผู้ใช้มีการเปลี่ยนแปลง
3. ภาพที่มีการแก้ไขและมีการใช้งานของผู้ใช้ =
django-cachebot ยังสามารถจัดการ select_related ไปข้างหน้าความสัมพันธ์และย้อนกลับความสัมพันธ์เช่น:
Photo.objects.select_related (). แคช (ผู้ใช้). กรอง (user__username = "david" สถานะ = 2)
Photo.objects.cache (ผู้ใช้). กรอง (user__username = "david" สถานะ = 2)
Photo.objects.cache (message__sender '). กรอง (message__sender = ผู้ใช้สถานะ = 2)
การตั้งค่า
CACHEBOT_CACHE_GET ค่าเริ่มต้น: เท็จ
ถ้า CACHEBOT_CACHE_GET = true แบบสอบถาม objects.get ทั้งหมดจะถูกเก็บไว้โดยอัตโนมัติ นี้สามารถแทนที่ในระดับผู้จัดการชอบโดย:
ระดับภาพถ่าย (models.Model):
& nbsp; ...
& nbsp; วัตถุ = models.Manager (cache_get = True)
CACHEBOT_CACHE_ALL ค่าเริ่มต้น: เท็จ
ถ้า CACHEBOT_CACHE_ALL = true แบบสอบถามทั้งหมดจะถูกเก็บไว้โดยอัตโนมัติ นี้สามารถแทนที่ในระดับผู้จัดการชอบโดย:
ระดับภาพถ่าย (models.Model):
& nbsp; ...
& nbsp; วัตถุ = models.Manager (cache_all = True)
CACHE_PREFIX เริ่มต้น: ''
สมมติว่าคุณมีการพัฒนาและการผลิตร่วมกันเซิร์ฟเวอร์เซิร์ฟเวอร์ memcached เดียวกัน ปกตินี้เป็นความคิดที่ไม่ดีเพราะแต่ละเซิร์ฟเวอร์อาจจะมีการเขียนทับเซิร์ฟเวอร์อื่น ๆ คีย์แคช ถ้าคุณเพิ่ม CACHE_PREFIX การตั้งค่าของคุณคีย์แคชทั้งหมดจะมีคำนำหน้าผนวกเข้ากับพวกเขาว่าเพื่อให้คุณสามารถหลีกเลี่ยงปัญหานี้
เตือน (สำคัญ!)
& nbsp; 1 django-cachebot ต้อง django 1.2 หรือสูงกว่า
& nbsp; 2 เพิ่ม / ลบวัตถุที่มี ManyRelatedManager จะไม่เป็นโมฆะโดยอัตโนมัติ เพราะนี่คือสัญญาณสำหรับประเภทนี้ของการดำเนินงานไม่ได้อยู่ใน Django จนถึง 1.2 จนแล้วคุณจะต้องทำให้การค้นหาเหล่านี้ด้วยตนเองเช่นดังนั้น:
& nbsp; จาก cachebot.signals นำเข้า invalidate_object
& nbsp; user.friends.add (เพื่อน)
& nbsp; invalidate_object (ผู้ใช้)
& nbsp; invalidate_object (เพื่อน)
& nbsp; 3 count () คำสั่งจะไม่ได้เก็บไว้
& nbsp; 4 หากคุณไม่ถูกต้องในสนามที่อยู่ในช่วงหรือไม่รวมแบบสอบถามแบบสอบถามเหล่านี้จะได้รับการยกเลิกเมื่ออะไรในการเปลี่ยนแปลงตาราง ตัวอย่างต่อไปนี้จะได้รับสิ่งที่ไม่ถูกต้องเมื่อผู้ใช้บนโต๊ะการเปลี่ยนแปลง:
& nbsp;. Photo.objects.cache (ผู้ใช้) กรอง (user__in = ผู้ใช้สถานะ = 2)
& nbsp;. Photo.objects.cache (ผู้ใช้) ไม่รวม (ผู้ใช้ = ใช้สถานะ = 2)
& nbsp; 5 คุณอาจจะใช้เครื่องมือเช่น django-memcache สถานะในการตรวจสอบสถานะของแคชของคุณ หาก memcache overfills กุญแจและเริ่มลดลงเป็นไปได้ว่าคำสั่งของคุณอาจไม่ได้รับการทำให้เป็นโมฆะ
& nbsp; 6 .values_list () ไม่แคชยัง คุณควรจะทำอะไรเช่นนี้แทน:
& nbsp; [. ภาพ ['รหัส'] สำหรับภาพถ่ายใน Photo.objects.cache (ผู้ใช้) กรอง (ผู้ใช้ผู้ใช้ =) .values (รหัส)]
& nbsp; 7 เป็นไปได้ว่ามีกรณีขอบฉันพลาด django-cachebot ยังอยู่ในวัยเด็กของมันดังนั้นคุณจึงควรตรวจสอบอีกครั้งว่ายังคงคำสั่งของคุณจะได้รับการเก็บไว้และไม่ถูกต้อง . โปรดแจ้งให้เราทราบหากคุณสังเกตเห็นความแตกต่างใด ๆ แปลก
ต้องการ
- งูใหญ่
- Django
ความคิดเห็นที่ไม่พบ