缓存帮助程序的集合
cachelper的Python项目详细描述
在一个包有用的缓存助手!
安装
pip install cachelper
助手
内存缓存
备忘录
缓存函数返回内存中的值。
importcachelper@cachelper.memoize()deffibo(n):ifnin(0,1):return1returnfibo(n-1)+fibo(n-2)fibo(10)
缓存redis/memcached
< H4>使用HelpMixin < /H4>
HelperMixin可用于实现以下方法的任何缓存客户端类:
- def get(self, key)
- def set(self, key, value, timeout=None)
- def delete(self, key)
- def get_many(self, keys)
- def set_many(self, mapping, timeout=None)
例如,rediscachefromwerkzeug就是这样一个类:
fromredisimportStrictRedisfromwerkzeug.contrib.cacheimportRedisCacheas_RedisCachefromcachelperimportHelperMixinclassRedisCache(_RedisCache,HelperMixin):'''werkzeug.contrib.cache.RedisCache mixed with HelperMixin'''defget_many(self,keys):returnsuper().get_many(*keys)rds=StrictRedis()cache=RedisCache(rds)>此定义定义了这些方法。 如果您的类已经定义同名方法,则MIXIN方法可能无法正常工作。
缓存装饰器
通过修饰函数或方法添加缓存。
@cache("key-{user_id}",timeout=300)defget_name(user_id):# Fetch user name from database...
缓存密钥模板也可以是用作密钥工厂的函数:
defname_key(user_id):return"key-%s"%user_id@cache(name_key,timeout=300)defget_name(user_id):# Fetch user name from database...
只需确保key factory函数接受与缓存的参数相同的参数 函数并返回键。
缓存的函数调用
有时我们不想缓存对特定函数的所有调用。 因此decorator不合适,在这种情况下,我们可以缓存调用而不是函数:
defget_name(user_id):# Fetch user name from database...user_id=42key="key-{user_id}".format(user_id=user_id)cache.call(lambda:get_name(user_id),key,timeout=300)
缓存多个调用
对于大多数缓存后端,批量获取或设置缓存要快得多。
defget_name(user_id):# Fetch user name from database...user_ids=[1,2,42,1984]names=cache.map("key-{user_id}",get_name,user_ids,timeout=300)