django-cached-field

軟件截圖:
django-cached-field
軟件詳細信息:
版本: 1.2.2
上傳日期: 14 Apr 15
開發: Martin Chase
許可: 免費
人氣: 2

Rating: 1.0/5 (Total Votes: 1)

Django的緩存場是一個Django應用程序,提供了芹菜遞延,在Django的ORM昂貴到計算數據緩存領域
使用Django ORM和芹菜,保持價格昂貴到計算屬性了最新的。
示例
假設你有你的車型之一慢的方法:
一流的燈柱(models.Model):
  @property
 高清slow_full_name(個體經營):
 睡眠(30)
 回報'的%s%S%s的“%(self.weight,self.first_name,self.country)
唉;太慢。讓我們緩存的。我們會想一些工具。芹菜與Django的芹菜將需要建立和順利沿哼著。然後,我們將增加我們的緩存領域,從模型中混入繼承和適當的命名我們的方法:
從django_cached_field進口CachedIntegerField,ModelWithCachedFields
一流的燈柱(models.Model,ModelWithCachedFields):
  slow_full_name = CachedTextField(空=真)
 高清calculate_slow_full_name(個體經營):
 睡眠(30)
 回報'的%s%S%s的“%(self.weight,self.first_name,self.country)
(是的,calculate_只是一個慣例。我清楚沒有放棄軌鬼......)
接下來,遷移DB模式採用南向包括新的緩存領域,或推出自己的。需要注意的是兩個字段將被添加到該表中,類型的文本cached_slow_full_name和slow_full_name_recalculation_needed boolean類型,可能默認為真。
已經是還挺更好。 lamppost.slow_full_name可能需要30秒第一次被調用給定記錄,但從此之後,這將是近了瞬間。當然,在這一點上,它永遠不會首先呼叫之後改變。
拼圖的其餘重要的一塊是我們的無效緩存。放入系統組成字段在一些views.py可能改變(這可能是更聰明有關,如果相關的值更新注意到):
@render_to(“燈柱/ edit.html”)
高清編輯(要求lamppost_id):
 燈柱= Lamppost.objects.get(PK = lamppost_id)
 如果request.METHOD =='POST':
 形式= LamppostForm(request.POST)
 如果form.is_valid():
  form.save()
  form.instance.flag_slow_full_name_as_stale()
 否則:
 形式= LamppostForm()
  {回報“形式”:形式,“燈柱”:燈柱}
這是最難的部分是開發商!緩存需要你追捕每一個值可以改變的地方,並調用該方法flag_slow_full_name_as_stale。是國家賦予一個隨機新值每天早上cron'o'clock?這標誌了最佳過時了cron'o'one。你計算權重的基礎上所有相關的鴿子的總和?鉤到鴿子落地。和起飛。一切都改變一個人鴿子的體重。正如林肯所說,“只有兩種編程難題:命名,緩存失效和關閉接一個錯誤”
安裝
你可以讓事情容易對自己:
PIP安裝Django緩存場
或者,手動安裝,您可以克隆回購和使用Python和setup.py安裝:
混帳混帳克隆://github.com/aquameta/django-cached-field.git
CD Django的緩存場/
蟒蛇setup.py安裝
經測試使用Django 1.3.1,2.3.1芹菜,Django的芹菜2.3.3。
配置
兩個設置更改非常需要的東西的工作:確保它的註冊程序,確保芹菜認為其任務的文件:
INSTALLED_APPS + = ['django_cached_field',]
CELERY_IMPORTS + = ['django_cached_field.tasks',]
一個變化是可選的:當標記為陳舊(默認)或留待屬性被訪問的下一次重新計算是否應該發生。在那裡你不關心你的緩存值無效,這是測試環境中十分有用。請注意,在這種情況下,你就不需要芹菜。
CACHED_FIELD_EAGER_RECALCULATION =#真或假的測試環境
這是一個全球性的選項,因此個別例外而應該通過傳遞and_recalculate參數來調用flag_FIELD_as_stale處理。
注意事項
- 如果你標記字段在一個數據庫事務中需要更長的時間才能完成比芹菜工作需要被稱為過時的競爭條件。
- 所有的ORM方法(如ORDER_BY,過濾器)需要使用cached_FIELD。
- recalculate_FIELD使用.update(cached_FIELD =設定值。
- flag_FIELD_as_stale使用.update,以及

要求

  • 在Python中
  • 在Django的

意見 django-cached-field

評論沒有發現
添加評論
打開圖片!