django缓存decorator+invalidate函数
django-cache-utils2的Python项目详细描述
django-cache-utils2提供cacheddecorator和invalidate函数。
安装
pip install django-cache-utils2
用法
from cache_utils2 import cached, invalidate @cached(60) def foo(x, y=0): print 'foo is called' return x+y foo(1, 2) # foo is called foo(1, y=2) foo(5, 6) # foo is called foo(5, 6) invalidate(foo, {'x': 1, 'y': 2}) foo(1, 2) # foo is called foo(5, 6) foo(x=2) # foo is called foo(x=2) class Foo(object): @cached(60) def foo(self, x, y): print "foo is called" return x+y obj = Foo() obj.foo(1,2) # foo is called obj.foo(1,2) invalidate(Foo.foo, {'x': 1, 'y': 2}) obj.foo(1,2) # foo is called
django示例
from django.db import models from cache_utils2 import cached, invalidate class CityManager(models.Manager): # cache a method result. 'self' parameter is ignored @cached(60*60*24) def default(self): return self.active()[0] # cache a method result. 'self' parameter is ignored, args and # kwargs are used to construct the cache key @cached(60*60*24) def get(self, *args, **kwargs): return super(CityManager, self).get(*args, **kwargs) class City(models.Model): # ... field declarations objects = CityManager() # cache django model instance method result by instance pk @cached(30, vary='self.pk') def has_offers(self): return self.offer_set.count() > 0 # invalidation of model methods invalidate(City.has_offers, {'self.pk': 1}
注释
如果修饰函数返回cache_utils2.NO_CACHE缓存将被忽略。
运行测试
获取源代码并运行runtests.py。