django cache machine-Django的自动缓存和失效的python库

2021-03-08 14:30

阅读:737

django cache machine是Django的自动缓存和失效的python库。

技术图片

  较早版本的“缓存计算机”要求您使用自定义的缓存后端。这些不再需要,它们已从高速缓存机中删除,现在使用标准的Django缓存后端。

安装

 您可以从pypi获取它:

pip install django-cache-machine

您也可以通过网盘下载django-cache-machine的源代码。

通过COUNT查询

使用QuerySet.count()可以调用缓存,但是这样的缓存不能可控的失效。高速缓存机必须完全选择才能找到对象键,这可能比您要提取的数据要多得多。我建议缓存超时时间较短;足够长的时间来避免重复的查询,但是足够短的时间以至于过时的计数将不是什么大问题。

CACHE_COUNT_TIMEOUT = 60  # seconds, not too long.

默认情况下,QuerySet.count()不会调用缓存。只有将CACHE_COUNT_TIMEOUT设置为caching.base.NO_CACHE以外的值时, 它们才会被缓存。

缓存管理器

要为模型启用缓存,请将添加CachingManager到该类并从继承CachingMixin。如果要使相关查找(外键)进入缓存,则CachingManager必须是默认管理器。如果您有多个应该缓存的管理器,请CachingQuerySet从另一个管理器的 get_queryset方法返回a而不是子类化CachingManager,因为这将多次连接post_save和post_delete信号。

最小缓存模型如下所示:

from django.db import models

from caching.base import CachingManager, CachingMixin

class Zomg(CachingMixin, models.Model):
    val = models.IntegerField()

    objects = CachingManager()

    # if you use Django 2.0 or later, you must set base_manager_name
    class Meta:
        base_manager_name = objects  # Attribute name of CachingManager(), above

 

每当您运行查询时,CachingQuerySet都将尝试在缓存中查找该查询。查询由键入{prefix}:{sql}。如果存在,我们返回缓存的结果集,每个人都很高兴。如果查询不在高速缓存中,则执行运行数据库查询的常规代码路径。随着结果集中的对象被迭代,它们被添加到一个列表中,一旦迭代完成,该列表将被缓存。

 


评论


亲,登录后才可以留言!