代码拉取完成,页面将自动刷新
一个基于Python装饰器Decorators的方法缓存系统,用于缓存Python方法的输出值,可以支持复杂数据类型,可以缓存到Redis中、Python dict、LUR算法存储中。English README.md
wrapcache
是一个可以缓存方法输出的装饰器,即简单的缓存方法的输出值。
缓存数据的键值Key完全依赖于方法和传入方法的参数,这部分完全透明,使用起来非常方便。
同时还提供部分API方法来通过代码获取缓存、删除缓存,支持Python2.6 ~ Python3.5
。
看了下面的一个示例,你就明白如何使用了:
import wrapcache
from time import sleep
import random
@wrapcache.wrapcache(timeout = 3)
def need_cache_function(input, t = 2, o = 3):
sleep(2)
return random.randint(1, 100)
if __name__ == "__main__":
print(need_cache_function(1, t = 2, o = 3)) #会在2秒之后打印随机数(例如59)
print(need_cache_function(1, t = 2, o = 3)) #会很快就数据缓存数据59,不需要等待2秒
sleep(3) # cache timeout
print(need_cache_function(1, t = 2, o = 3)) #会在2秒后打印另外一个随机数,一般不会等于59
@wrapcache.wrapcache(timeout = timeout, adapter = adapter)
timeout
: 缓存会持续多长时间,单位为秒,如果为-1
,表示不缓存。adapter
: 缓存到何处?RedisAdapter
和 MemoryAdapter
可选. 默认 MemoryAdapter
.当使用MemoryAdapter
和RedisAdapter
适配的时候,需要在使用之前设置他们的数据存储器
。
对于MemoryAdapter
来说,提供两种缓存器:
{}
,也是MemoryAdapter存储器默认的存储器
。可以无限量存储数据,具有最高的效率。但是需要手动进行清理缓存,否则可能导致内存泄露,建议在Key值比较固定的方法是哪个使用,例如无参数的方法。LruCacheDB
存储器(加入了LUR
算法的Python字典)。LUR算法经过优化,所有操作的算法复杂度均为o(1),使用时需要指定size
,为缓存的大小,默认为-1,不限定大小,建议按照个人项目需要进行设置。例如:
from wrapcache.database import LruCacheDB
lruDB = MemoryAdapter.db = LruCacheDB(size = 100)
RedisAdapter.db = lruDB
当使用RedisAdapter
,必须设置其存储器,否则无法使用,RedisAdapter存储器极为redis连接实例,需要pip install redis
。例如:
REDIS_POOL = redis.ConnectionPool(host = '10.246.13.1', port = 6379, password = 'redis_pwd', db = 1)
REDIS_INST = redis.Redis(connection_pool = REDIS_POOL, charset = 'utf8')
RedisAdapter.db = REDIS_INST
三种方法安装 wrapcache:
pip install wrapcache
python setup.py install
即可。wrapcache
复杂到当前目录,或者 Python的site-packages
目录, 然后 import wrapcache
即可使用。
import wrapcache
@wrapcache.wrapcache(timeout = 3)
def need_cache_function():
return 'hello wrapcache'
wrapcache.keyof(func, *args, **kws)
: 获取方法的缓存Key值.wrapcache.get(key, adapter = MemoryAdapter)
: 或者缓存之.wrapcache.set(key, value, timeout = -1, adapter = MemoryAdapter)
: 设置缓存值.wrapcache.remove(key, adapter = MemoryAdapter)
: 移除一个缓存.wrapcache.flush(adapter = MemoryAdapter)
: 移除所有的缓存.API方法中,第2~5个API在使用的时候,需要传入 adapter
来设置需要操作哪一个适配器。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。