摘要:自己因為經常遇到這種場景,所以將其封裝成一個庫,方便使用。如何使用使用簡單,只需要要在方法上面加一個裝飾器即可緩存,并且設置緩存過期時間。以上即可,第一次運行需要秒,第二次運行過期時間秒之內瞬間給出緩存結果。適合于小場景的方法緩存。
A python Function / Method OUTPUT cache system base on function Decorators.
基本信息github 地址:https://github.com/hustcc/wrapcache
使用場景
經常會在某些很小的場合需要緩存一些數據,提高一些性能,而這種緩存又不是經常需要,比如:
兩個進程共享數據庫,其中只讀進程讀取數據做一些操作,這個時候,可以將數據庫內容緩存一下,避免重復讀數據庫;
一個web頁面數據太多,然而頁面并不需要完全的實時性,這個時候就可以將頁面內容完全緩存,在過期時間之后,不讀數據庫,不進行大量計算,這種在一些報告頁面非常常見。
這兩個場景其實挺常見的,要完成也不難,無非就是存到python 字段,加一個時間戳,判斷過期,如果是redis,就直接存redis,并賦予timeout時間就ok了。
自己因為經常遇到這種場景,所以將其封裝成一個python庫,方便使用。
如何使用使用簡單,只需要要在方法上面加一個裝飾器即可緩存,并且設置緩存過期時間。
import wrapcache @wrapcache.wrapcache(timeout = 60) def need_cache_function(input, t = 2, o = 3): sleep(2) return random.randint(1, 100)
以上即可,第一次運行需要 2 秒,第二次運行(過期時間 60 秒之內)瞬間給出緩存結果。適合于小場景的方法緩存。
安裝方法首先 pip install wrapcache,支持python2和python3。
然后import wrapcache。
最后在需要緩存的方法上加上裝飾器即可@wrapcache.wrapcache(timeout = 3)
其中 @wrapcache.wrapcache(timeout = 3, adapter = RedisAdapter) 有兩個參數:
timeout, 過期時間,默認為-1,不緩存數據
adapter,存儲器,默認為MemoryAdapter(存到python的全局字典中),可選RedisAdapter(存儲到redis中)
注意:如果選擇adapter = RedisAdapter,則需要在使用前設置redis市里 調用 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
目前是使用內存 dict 和 redis 存儲緩存,后續要支持將 memcached 等服務器中,只需要補充 adapter 中代碼,實現對應方法即可。
歡迎 push requst 和 issue 。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/61760.html
摘要:自己因為經常遇到這種場景,所以將其封裝成一個庫,方便使用。如何使用使用簡單,只需要要在方法上面加一個裝飾器即可緩存,并且設置緩存過期時間。以上即可,第一次運行需要秒,第二次運行過期時間秒之內瞬間給出緩存結果。適合于小場景的方法緩存。 A python Function / Method OUTPUT cache system base on function Decorators. 基...
摘要:裝飾器的使用符合了面向對象編程的開放封閉原則。三簡單的裝飾器基于上面的函數執行時間的需求,我們就手寫一個簡單的裝飾器進行實現。函數體就是要實現裝飾器的內容。類裝飾器的實現是調用了類里面的函數。類裝飾器的寫法比我們裝飾器函數的寫法更加簡單。 目錄 前言 一、什么是裝飾器 二、為什么要用裝飾器 ...
摘要:我們以測量函數運行時間為例來講一講裝飾器的運行原理。三更加通用的裝飾器前面兩部分講了裝飾器的原理,這一部分就講講要寫出一個通用的裝飾器需要注意的問題。首先就是參數的問題,裝飾器返回的函數不是原來的函數,函數的簽名也就和原來的函數簽名不一樣。 一、最簡單的裝飾器 裝飾器是python中很基礎也很實用的一個特性。通過裝飾器我們可以很方便地為一些函數添加相同的功能。我們以測量函數運行時間為例...
摘要:如果不使用裝飾器的話,普通的做法可能是在中寫一堆校驗代碼來判斷用戶是否登錄,然后決定后面的執行邏輯,這樣比較麻煩。 前言 裝飾器是程序開發中經常會用到的一個功能,也是python語言開發的基礎知識,如果能夠在程序中合理的使用裝飾器,不僅可以提高開發效率,而且可以讓寫的代碼看上去顯的高大上^_^ 使用場景 可以用到裝飾器的地方有很多,簡單的舉例如以下場景 引入日志 函數執行時間統計 執...
摘要:閉包可以用來在一個函數與一組私有變量之間創建關聯關系。夾帶私貨外部變量返回的是函數,帶私貨的函數支持將函數當成對象使用的編程語言,一般都支持閉包。所以說當你的裝飾器需要自定義參數時,一般都會形成閉包。 Python中的閉包不是一個一說就能明白的概念,但是隨著你往學習的深入,無論如何你都需要去了解這么一個東西。 閉包的概念 我們嘗試從概念上去理解一下閉包。 在一些語言中,在函數中可以(嵌...
閱讀 684·2021-11-25 09:43
閱讀 2953·2021-11-24 10:20
閱讀 1002·2021-10-27 14:18
閱讀 1076·2021-09-08 09:36
閱讀 3382·2021-07-29 14:49
閱讀 1783·2019-08-30 14:07
閱讀 2937·2019-08-29 16:52
閱讀 3049·2019-08-29 13:12