缓存帮助程序的集合

cachelper的Python项目详细描述


https://travis-ci.org/suzaku/cachelper.svg?branch=masterhttps://img.shields.io/pypi/v/cachelper.svg

在一个包有用的缓存助手!

Sponsor

安装

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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaSpringBootHibernate5忽略@Table和@Column   java readLine是如何工作的?   java除了Oracle的JVM(windows)之外,还有什么BSD许可的替代方案吗?   javascript处理程序执行导致异常:所需的MultipartFile参数“file”不存在   java如何检查url是否与标识符匹配?   java在对象创建之后实现一个接口   java安卓:如何将github库放入项目中   java如何制作自定义文本组件?   如何在java中更新属性文件   java Hibernate持久映射   JavaSpring批处理如何从postgres读取数据,然后在步骤中写入数据   java应用程序已在Android Emulator Eclipse中停止   java找不到参数[org.jetbrains.kotlin:kotlinstdlibjdk7:1.3.50]的方法实现()   java AWS DynamoDB如何从数据库中获取只有一个字段的对象   在使用ajax进行表单提交时,java无法阻止默认表单提交   集合如何在Java中定义基于两个变量进行比较的比较器   多线程基准测试Java中的多线程集合   java如何通过浏览器运行终端程序?