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

评论没有发现
添加评论
打开图片!