标签: django-cache

你怎么知道memcached是否正在做任何事情?

我正在测试使用memcached来缓存django视图.如何判断memcached是否实际缓存了Linux命令行中的任何内容?

django memcached django-cache

74
推荐指数
8
解决办法
6万
查看次数

使用Django进行redis缓存的django-redis-cache和django-redis之间的区别?

我注意到有两个不同的项目使用redis进行django缓存

https://github.com/sebleier/django-redis-cache/

https://github.com/niwibe/django-redis

比其他人更了解一个,更多的标准包装?我无法决定使用哪个.

django caching django-cache redis

40
推荐指数
1
解决办法
5104
查看次数

如何在Django中使用2个不同的缓存后端?

我需要使用memcached和基于文件的缓存.我在设置中设置了缓存:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': 'c:/foo/bar',
    },
    'inmem': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    }
}
Run Code Online (Sandbox Code Playgroud)

假的是暂时的.文件说:

cache.set('my_key', 'hello, world!', 30)
cache.get('my_key')
Run Code Online (Sandbox Code Playgroud)

好的,但是我现在如何设置和获取仅用于'inmem'缓存后端的缓存(在将来的memcached中)?文档没有提到如何做到这一点.

django django-cache django-caching

19
推荐指数
2
解决办法
5523
查看次数

Django中的每请求缓存?

我想实现一个装饰器,它为任何方法提供每请求缓存,而不仅仅是视图.这是一个示例用例.

我有一个自定义标记,用于确定长记录列表中的记录是否为"收藏夹".为了检查项目是否是收藏夹,您必须查询数据库.理想情况下,您将执行一个查询以获取所有收藏夹,然后只针对每条记录检查缓存列表.

一种解决方案是在视图中获取所有收藏夹,然后将该集合传递到模板中,然后传递到每个标签调用中.

或者,标记本身可以执行查询本身,但仅在第一次调用时执行.然后可以为后续调用缓存结果.好处是,您可以在任何视图上使用任何模板中的此标记,而无需提醒视图.

在现有的缓存机制中,您可以将结果缓存50毫秒,并假设它与当前请求相关联.我想让这种相关性变得可靠.

这是我目前拥有的标签示例.

@register.filter()
def is_favorite(record, request):

    if "get_favorites" in request.POST:
        favorites = request.POST["get_favorites"]
    else:

        favorites = get_favorites(request.user)

        post = request.POST.copy()
        post["get_favorites"] = favorites
        request.POST = post

    return record in favorites
Run Code Online (Sandbox Code Playgroud)

有没有办法从Django获取当前请求对象,没有传递它?从标签,我可以传递请求,它将始终存在.但是我想从其他函数中使用这个装饰器.

是否存在每请求缓存的现有实现?

django django-cache

18
推荐指数
2
解决办法
8763
查看次数

如何测试django缓存?

有没有办法确保页面来自生产服务器和开发服务器上的缓存?

解决方案不应涉及缓存中间件,因为并非每个项目都使用它们.虽然解决方案本身可能一个中间件.

只检查数据是否陈旧不是一种非常安全的IMO测试方法.

python django caching django-cache

17
推荐指数
3
解决办法
6018
查看次数

django querysets + memcached:最佳实践

试图理解在django低级别cache.set()期间发生的事情.特别是,有关查询集的哪个部分存储在memcached中的详细信息.

首先,我是否正确地解释了django文档?

  • queryset(python对象)拥有/维护自己的缓存
  • 访问数据库是懒惰的; 即使queryset.count为1000,如果我为1条记录执行object.get,那么对于该1条记录,dbase只会被访问一次.
  • 当通过apache prefork MPM访问django视图时,每当特定守护进程实例X最终调用包含类似"tournres_qset = TournamentResult.objects.all()"之类的特定视图时,每次都会产生一个新的正在创建的tournres_qset对象.也就是说,任何可能由之前(tcp/ip)访问的tournres_qset python对象在内部缓存的内容都不会被新请求的tournres_qset使用.

现在关于在视图中将内容保存到memcached的问题.假设我在视图的顶部添加了类似的内容:

tournres_qset = cache.get('tournres', None)
if tournres_qset is None:
    tournres_qset = TournamentResult.objects.all()
    cache.set('tournres', tournres_qset, timeout)
# now start accessing tournres_qset
# ...
Run Code Online (Sandbox Code Playgroud)

在cache.set()期间存储了什么?

  • 整个查询集(python对象)是否被序列化并保存?

  • 由于尚未使用查询集来获取任何记录,这只是浪费时间,因为在memcache中实际上没有保存特定记录的内容?(任何将来的请求都将从memcache获取queryset对象,它始终是新的,具有空的本地queryset缓存;将始终访问dbase.)

  • 如果以上情况属实,那么我是否应该始终在查看结束时重新保存查询集,之后在整个vierw中使用它来访问某些记录,这将导致查询集的本地缓存得到更新,哪些应该更新总是被重新保存到memcached?但是,这总是会导致再次序列化queryset对象.加快速度如此之快.

  • 或者,cache.set()是否强制查询集对象迭代并从dbase访问所有记录,这些记录也将保存在memcache中?即使视图只访问查询集的子集,一切都会被保存?

我看到各方面的陷阱,这让我觉得我
误解了很多东西.

希望这是有道理的,并欣赏澄清或指向一些"标准"指南.谢谢.

python django django-cache

16
推荐指数
1
解决办法
5156
查看次数

在Django表单中缓存ModelChoiceField或ModelMultipleChoiceField的查询集选项

在Django表单中使用ModelChoiceFieldModelMultipleChoiceField时,有没有办法传入一组缓存的选项?目前,如果我通过queryset参数指定选项,则会导致数据库命中.

我想使用memcached缓存这些选项,并在显示具有此类字段的表单时防止对数据库的不必要的命中.

django django-forms django-admin django-cache django-queryset

12
推荐指数
2
解决办法
4899
查看次数

如何禁用Django REST Framework缓存?

我刚开始使用django和DRF,并出现问题,看起来像DRF缓存响应.我的意思是 - 我可以更改对象,创建新对象或删除它 - 并且DRF保持响应,没有任何改变.例如,我创建了一个对象,但modelViewSet仍返回未显示此对象的数据.但是,如果我直接请求它对象 - 它表明它已创建.任何其他行动都是如此.我在DRF中找不到关于缓存的话题,看起来我没有任何django chaching中间件,所以我不知道发生了什么.只有一件事有帮助 - 重启服务器(我使用的是默认的dev-server).

还有一件事 - 当django视图呈现时,所有数据都可以,而不是DRF视图.

这是我正在使用的序列化器/ modelViewSets之一.尽可能简单.而且 - 我没有使用django缓存后端.至少 - 我的设置中没有任何内容.

class WorkOperationSerializer(serializers.ModelSerializer):
    class Meta:
        model = WorkOperation


class WorkOperationAPIView(viewsets.ModelViewSet):
    serializer_class = WorkOperationSerializer
    queryset = WorkOperation.objects.all()

    def get_queryset(self):
        return self.queryset
Run Code Online (Sandbox Code Playgroud)

django django-cache django-rest-framework

10
推荐指数
1
解决办法
3370
查看次数

Django缓存框架.TIMEOUT和CACHE_MIDDLEWARE_SECONDS有什么区别?

我一直在使用数据库缓存在Django中设置缓存.TIMEOUT和CACHE_MIDDLEWARE_SECONDS有两个设置,用于控制页面缓存的时间长度.这两个设置有什么区别?

django django-cache

9
推荐指数
2
解决办法
3674
查看次数

为什么Django会返回过时的缓存数据?

我有两个Django模型,如下所示,MyModel1&MyModel2:

class MyModel1(CachingMixin, MPTTModel):
    name = models.CharField(null=False, blank=False, max_length=255)
    objects = CachingManager()

    def __str__(self):
        return "; ".join(["ID: %s" % self.pk, "name: %s" % self.name, ] )

class MyModel2(CachingMixin, models.Model):
    name = models.CharField(null=False, blank=False, max_length=255)
    model1 = models.ManyToManyField(MyModel1, related_name="MyModel2_MyModel1")
    objects = CachingManager()

    def __str__(self):
        return "; ".join(["ID: %s" % self.pk, "name: %s" % self.name, ] )
Run Code Online (Sandbox Code Playgroud)

MyModel2有一个ManyToMany字段来MyModel1授权model1

现在看看当我向这个ManyToMany字段添加一个新条目时会发生什么.据Django说,它没有效果:

>>> m1 = MyModel1.objects.all()[0]
>>> m2 = MyModel2.objects.all()[0]
>>> m2.model1.all()
[]
>>> m2.model1.add(m1)
>>> m2.model1.all() …
Run Code Online (Sandbox Code Playgroud)

python django django-cache django-cache-machine

9
推荐指数
1
解决办法
968
查看次数