django - Django 管理器函数的简单缓存机制
问题描述
我有一些 Django 简单管理器函数,我想在其中缓存响应(使用 Memcached),并在模型保存/删除时使这些函数无效。我认为在 Django 社区中会有一个标准的解决方案,但我找不到,所以想检查一下我没有重新发明轮子。
这是一个使用django-cache-memoize的可能解决方案的示例
from cache_memoize import cache_memoize
from django.utils.decorators import method_decorator
from django.db.models.signals import post_save, post_delete
from django.conf import settings
class MyModel(Model):
name = models.CharField()
is_live = models.BooleanField()
objects = MyModelManager()
class MyModelManager(Manager):
@method_decorator(cache_memoize(settings.CACHE_TTL, prefix='_get_live'))
def _get_live(self):
return super().get_queryset().filter(is_live=True)
def example_queryset():
return self._get_live()
# Cache invalidation
def clear_manager_cache(sender, instance, *args, **kwargs):
MyModel.objects._get_live.invalidate(MyModel)
post_save.connect(clear_manager_cache, sender=MyModel, weak=False)
post_delete.connect(clear_manager_cache, sender=MyModel, weak=False)
这似乎可行,但让我印象深刻的是相当标准的 Django 模式/用例的样板。
有没有更简单的解决方案来实现类似的事情?
解决方案
推荐阅读
- wordpress-plugin-creation - WordPress插件图标不显示
- youtube-api - 从 DOM 中移除 iFrame 后,跟踪代码管理器 YouTube 进度触发器继续
- azure-devops - 发布管道排队等待多个代理空闲
- grpc-c++ - GRPC 重新连接客户端的 IP 更改
- django - Wagtail Streamblock 模板渲染
- symfony - 如何在 Sylius 中自定义实体属性?
- r - 使用自定义打印方法打印列表时如何防止/删除控制台中的空白行
- python-3.x - format(integer, 'string'+'string'+'string') 在 Python 中是如何工作的?
- android - Activity 销毁后使用 startForeground 服务不保留
- ffmpeg - 仅右声道音频,无需通过 FFMPEG 更改位深度