Django 有没有办法在资源更新后使缓存失效?
我有一个Django(1.8.17)应用程序,我使用Tastypie(0.13.3)作为RESTAPI框架。 我有一些非常简单的资源,我使用Django 有没有办法在资源更新后使缓存失效?,django,rest,caching,tastypie,Django,Rest,Caching,Tastypie,我有一个Django(1.8.17)应用程序,我使用Tastypie(0.13.3)作为RESTAPI框架。 我有一些非常简单的资源,我使用SimpleCache将它们缓存15分钟 from tastypie.resources import ModelResource from my_app.models import MyModel from tastypie.cache import SimpleCache class MyModelResource(ModelResource):
SimpleCache
将它们缓存15分钟
from tastypie.resources import ModelResource
from my_app.models import MyModel
from tastypie.cache import SimpleCache
class MyModelResource(ModelResource):
cache = SimpleCache(timeout=900)
class Meta:
queryset = MyModel.objects.all()
问题是:当我通过
PUT
请求更新资源时,资源在数据库中得到更新,但不会从缓存中失效,因此我继续获取旧数据15分钟,这很不方便,我希望当资源得到更新时,它将从数据库中获取并再次缓存。有没有人面临同样的问题?经过长时间的搜索,什么也没找到,我有了一个主意!重写PUT
方法,每次更新对象时只从缓存中删除对象,这是从一开始就应该发生的自然方式。
我发现Tastypie的SimpleCache使用的是Django的核心缓存(至少在本例中是这样;think settings),所以我就是这样解决这个问题的:
from tastypie.resources import ModelResource
from my_app.models import MyModel
from tastypie.cache import SimpleCache
from django.core.cache import cache
class MyModelResource(ModelResource):
cache = SimpleCache(timeout=900)
class Meta:
queryset = MyModel.objects.all()
def put_detail(self, request, **kwargs):
# Build the key
key = "{0}:{1}:detail:pk={2}".format(kwargs['api_name'], kwargs['resource_name'], kwargs['pk'])
cache.delete(key)
return super(MyModelResource, self).put_detail(request, **kwargs)
@e4c5可能重复不,不是。是因为包不同,但核心问题和解决方案是相同的same@e4c5不,核心问题不一样,解决方案也不是很有用。我深入研究了Tastypie和Django缓存,找到了一个高效而简单的解决方案!然后发布或删除问题