摘要:自己因?yàn)榻?jīng)常遇到這種場(chǎng)景,所以將其封裝成一個(gè)庫(kù),方便使用。如何使用使用簡(jiǎn)單,只需要要在方法上面加一個(gè)裝飾器即可緩存,并且設(shè)置緩存過(guò)期時(shí)間。以上即可,第一次運(yùn)行需要秒,第二次運(yùn)行過(guò)期時(shí)間秒之內(nèi)瞬間給出緩存結(jié)果。適合于小場(chǎng)景的方法緩存。
A python Function / Method OUTPUT cache system base on function Decorators.
基本信息github 地址:https://github.com/hustcc/wrapcache
使用場(chǎng)景
經(jīng)常會(huì)在某些很小的場(chǎng)合需要緩存一些數(shù)據(jù),提高一些性能,而這種緩存又不是經(jīng)常需要,比如:
兩個(gè)進(jìn)程共享數(shù)據(jù)庫(kù),其中只讀進(jìn)程讀取數(shù)據(jù)做一些操作,這個(gè)時(shí)候,可以將數(shù)據(jù)庫(kù)內(nèi)容緩存一下,避免重復(fù)讀數(shù)據(jù)庫(kù);
一個(gè)web頁(yè)面數(shù)據(jù)太多,然而頁(yè)面并不需要完全的實(shí)時(shí)性,這個(gè)時(shí)候就可以將頁(yè)面內(nèi)容完全緩存,在過(guò)期時(shí)間之后,不讀數(shù)據(jù)庫(kù),不進(jìn)行大量計(jì)算,這種在一些報(bào)告頁(yè)面非常常見(jiàn)。
這兩個(gè)場(chǎng)景其實(shí)挺常見(jiàn)的,要完成也不難,無(wú)非就是存到python 字段,加一個(gè)時(shí)間戳,判斷過(guò)期,如果是redis,就直接存redis,并賦予timeout時(shí)間就ok了。
自己因?yàn)榻?jīng)常遇到這種場(chǎng)景,所以將其封裝成一個(gè)python庫(kù),方便使用。
如何使用使用簡(jiǎn)單,只需要要在方法上面加一個(gè)裝飾器即可緩存,并且設(shè)置緩存過(guò)期時(shí)間。
import wrapcache @wrapcache.wrapcache(timeout = 60) def need_cache_function(input, t = 2, o = 3): sleep(2) return random.randint(1, 100)
以上即可,第一次運(yùn)行需要 2 秒,第二次運(yùn)行(過(guò)期時(shí)間 60 秒之內(nèi))瞬間給出緩存結(jié)果。適合于小場(chǎng)景的方法緩存。
安裝方法首先 pip install wrapcache,支持python2和python3。
然后import wrapcache。
最后在需要緩存的方法上加上裝飾器即可@wrapcache.wrapcache(timeout = 3)
其中 @wrapcache.wrapcache(timeout = 3, adapter = RedisAdapter) 有兩個(gè)參數(shù):
timeout, 過(guò)期時(shí)間,默認(rèn)為-1,不緩存數(shù)據(jù)
adapter,存儲(chǔ)器,默認(rèn)為MemoryAdapter(存到python的全局字典中),可選RedisAdapter(存儲(chǔ)到redis中)
注意:如果選擇adapter = RedisAdapter,則需要在使用前設(shè)置redis市里 調(diào)用 RedisAdapter.db = redis_instance
REDIS_CACHE_POOL = redis.ConnectionPool(host = "xx.xxx.xx.xxx", port = 6379, password = "redis_pwd", db = 2) REDIS_CACHE_INST = redis.Redis(connection_pool = REDIS_CACHE_POOL, charset = "utf8") RedisAdapter.db = REDIS_CACHE_INST #初始化裝飾器緩存TODO
目前是使用內(nèi)存 dict 和 redis 存儲(chǔ)緩存,后續(xù)要支持將 memcached 等服務(wù)器中,只需要補(bǔ)充 adapter 中代碼,實(shí)現(xiàn)對(duì)應(yīng)方法即可。
歡迎 push requst 和 issue 。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/61760.html
摘要:自己因?yàn)榻?jīng)常遇到這種場(chǎng)景,所以將其封裝成一個(gè)庫(kù),方便使用。如何使用使用簡(jiǎn)單,只需要要在方法上面加一個(gè)裝飾器即可緩存,并且設(shè)置緩存過(guò)期時(shí)間。以上即可,第一次運(yùn)行需要秒,第二次運(yùn)行過(guò)期時(shí)間秒之內(nèi)瞬間給出緩存結(jié)果。適合于小場(chǎng)景的方法緩存。 A python Function / Method OUTPUT cache system base on function Decorators. 基...
摘要:裝飾器的使用符合了面向?qū)ο缶幊痰拈_(kāi)放封閉原則。三簡(jiǎn)單的裝飾器基于上面的函數(shù)執(zhí)行時(shí)間的需求,我們就手寫(xiě)一個(gè)簡(jiǎn)單的裝飾器進(jìn)行實(shí)現(xiàn)。函數(shù)體就是要實(shí)現(xiàn)裝飾器的內(nèi)容。類(lèi)裝飾器的實(shí)現(xiàn)是調(diào)用了類(lèi)里面的函數(shù)。類(lèi)裝飾器的寫(xiě)法比我們裝飾器函數(shù)的寫(xiě)法更加簡(jiǎn)單。 目錄 前言 一、什么是裝飾器 二、為什么要用裝飾器 ...
摘要:我們以測(cè)量函數(shù)運(yùn)行時(shí)間為例來(lái)講一講裝飾器的運(yùn)行原理。三更加通用的裝飾器前面兩部分講了裝飾器的原理,這一部分就講講要寫(xiě)出一個(gè)通用的裝飾器需要注意的問(wèn)題。首先就是參數(shù)的問(wèn)題,裝飾器返回的函數(shù)不是原來(lái)的函數(shù),函數(shù)的簽名也就和原來(lái)的函數(shù)簽名不一樣。 一、最簡(jiǎn)單的裝飾器 裝飾器是python中很基礎(chǔ)也很實(shí)用的一個(gè)特性。通過(guò)裝飾器我們可以很方便地為一些函數(shù)添加相同的功能。我們以測(cè)量函數(shù)運(yùn)行時(shí)間為例...
摘要:如果不使用裝飾器的話,普通的做法可能是在中寫(xiě)一堆校驗(yàn)代碼來(lái)判斷用戶是否登錄,然后決定后面的執(zhí)行邏輯,這樣比較麻煩。 前言 裝飾器是程序開(kāi)發(fā)中經(jīng)常會(huì)用到的一個(gè)功能,也是python語(yǔ)言開(kāi)發(fā)的基礎(chǔ)知識(shí),如果能夠在程序中合理的使用裝飾器,不僅可以提高開(kāi)發(fā)效率,而且可以讓寫(xiě)的代碼看上去顯的高大上^_^ 使用場(chǎng)景 可以用到裝飾器的地方有很多,簡(jiǎn)單的舉例如以下場(chǎng)景 引入日志 函數(shù)執(zhí)行時(shí)間統(tǒng)計(jì) 執(zhí)...
摘要:閉包可以用來(lái)在一個(gè)函數(shù)與一組私有變量之間創(chuàng)建關(guān)聯(lián)關(guān)系。夾帶私貨外部變量返回的是函數(shù),帶私貨的函數(shù)支持將函數(shù)當(dāng)成對(duì)象使用的編程語(yǔ)言,一般都支持閉包。所以說(shuō)當(dāng)你的裝飾器需要自定義參數(shù)時(shí),一般都會(huì)形成閉包。 Python中的閉包不是一個(gè)一說(shuō)就能明白的概念,但是隨著你往學(xué)習(xí)的深入,無(wú)論如何你都需要去了解這么一個(gè)東西。 閉包的概念 我們嘗試從概念上去理解一下閉包。 在一些語(yǔ)言中,在函數(shù)中可以(嵌...
閱讀 693·2021-11-25 09:43
閱讀 2964·2021-11-24 10:20
閱讀 1016·2021-10-27 14:18
閱讀 1088·2021-09-08 09:36
閱讀 3398·2021-07-29 14:49
閱讀 1796·2019-08-30 14:07
閱讀 2946·2019-08-29 16:52
閱讀 3057·2019-08-29 13:12