跳转到主要内容

Redis 工具

项目描述

Redis Tools (retools)

retools 是一组Redis工具包。它的目标是提供一系列始终100%单元测试、快速、高效且利用Redis功能的Python工具。

当前 retools 中的工具

  • 缓存

  • 全局锁

未来实施计划

  • 一个类似于Celery的工作/作业处理系统,但基于Ruby的Resque系统的工作方式。

Build Status

缓存

一个高性能的缓存系统,可以作为Beaker缓存的直接替代品。与Beaker的缓存不同,它利用Redis进行分布式写锁dogpile预防。它还收集命中/未命中缓存统计信息,以及记录哪些函数和参数使用了哪些区域。

示例

from retools.cache import CacheRegion, cache_region, invalidate_function

CacheRegion.add_region('short_term', expires=3600)

@cache_region('short_term')
def slow_function(*search_terms):
    # Do a bunch of work
    return results

my_results = slow_function('bunny')

# Invalidate the cache for 'bunny'
invalidate_function(slow_function, [], 'bunny')

与Beaker的区别

与Beaker的缓存系统不同,这个系统是专门为Redis构建的。因此,它增加了Beaker不具备的几个功能

  • 分布式写锁,以确保在集群中一次只有一个写者更新缓存。

  • 命中/未命中缓存统计信息,以帮助您了解哪些缓存利用效率较低(可能需要更高的过期时间,或者根本不值得缓存)。

  • 非常小巧、紧凑的代码库,100%单元测试覆盖率。

锁定

基于 Chris Lamb 的示例 实现的Redis基于的锁,作为Python上下文管理器。

示例

from retools.lock import Lock

with Lock('a_key', expires=60, timeout=10):
    # do something that should only be done one at a time

许可协议

retools 根据 MIT 许可协议提供。

作者

retoolsBen Bangert 提供。

变更日志

0.4.1 (02/19/2014)

错误修复

  • 正确支持StrictRedis与ZADD(用于限制器)。Bernardo Heynemann的补丁。

0.4 (01/27/2014)

功能

  • 添加了限制器功能。由Bernardo Heynemann提供的请求 #22。

0.3 (08/13/2012)

错误修复

  • 为RedisLock调用redis.expire设置适当的过期值。由Mike McCabe修复。

  • 使用functools.wraps来保留cache_region的文档字符串。由Daniel Holth修复。

API更改

  • 在QueueManager类中添加了get_job/get_jobs方法,用于获取作业信息或获取队列的作业列表。

0.2 (02/01/2012)

错误修复

  • 缓存关键修复,防止旧值永久显示。感谢Daniel Holth追踪到问题。

  • 实际上在Redis中设置缓存值的过期时间。默认为1周。

功能

  • 缓存统计信息现在是可选的,可以禁用以略微减少存储/检索缓存数据所使用的Redis查询。

  • 添加了带事件支持的worker/job队列系统的第一个版本。

内部

  • Connection进行了大量重构,使其不再是一个类单例,而是创建并默认使用全局全局_connection实例。

  • 提高了条件覆盖率到100%(通过instrumental)。

向后不兼容

  • 更改默认全局Redis连接已更改语义,而不是使用Connection.set_default,应直接设置全局_connection的redis属性。

    import redis
    from retools import global_connection
    
    global_connection.redis = redis.Redis(host='myhost')

不兼容性

  • 从invalidate_region中删除了clear参数,因为从集合中删除键但不删除命中统计信息可能导致在Redis中积累数据,这些数据除了运行在生产环境中的.keys()之外没有其他简单的方法可以删除。

  • 从invalidate_callable(invalidate_function)中删除了deco_args,因为它实际上不需要,因为名称空间已经包含在可调用对象中,可以对其进行无效化。

0.1 (07/08/2011)

功能

  • 以类似Beaker的方式缓存,带有命中/未命中统计信息,由Redis全局写锁支持,以防止犬群效应,同时提供旧值。

  • Redis全局锁

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源分发

retools-0.4.1.tar.gz (32.6 KB 查看哈希值)

上传时间

构建分发

retools-0.4.1-py2.py3-none-any.whl (30.9 kB 查看哈希值)

上传时间 Python 2 Python 3

支持