1.ubuntu16.04 install redis

# ubuntu 16.04 之後推薦使用 apt

sudo apt update

sudo apt install build-essential tcl

sudo apt install redis-server

# 安裝 stable 版本

[參考](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-redis-on-ubuntu-16-04)

2.flask-cache簡單應用

from flask import Flask
from flask_cache import Cache

app = Flask(__name__)
# 內建的
cache = Cache(app, config={'CACHE_TYPE': 'simple'})

# 第三方的 cache db(redis)
cache = Cache(app, config={'CACHE_TYPE': 'redis',          # Use Redis
                           'CACHE_REDIS_HOST': '127.0.0.1',  # Host, default 'localhost'
                           'CACHE_REDIS_PORT': 6379,       # Port, default 6379
                           'CACHE_REDIS_PASSWORD': '0000',  # Password
                           'CACHE_REDIS_DB': 2}            # DB, default 0

# cached 方法有三個參數
# timeout 為過期時間(秒),預設為 None 永遠不過期
# key_prefix 為存進 cachedb 的 key,預設為 'view/%s',但若想要存的不是 view function,要自定義,例:key_prefix='test1'
# unless 設為 True 時,cache 沒有作用,預設為 None 就是 cache 有效
@app.route('/hello')
@cache.cached(timeout=300, key_prefix='view_%s', unless=None)
def hello():
    print('view hello called')
    return render_template('hello.html')

# 修飾一般函數,需要自定義 key_prefix
@cache.cached(timeout=50, key_prefix='get_list')
def get_list():
    print('get_list')
    return ['a','b','c','d','e']

3.memoize

# 如果函數帶參數,但我們只存函數本身,就會發生給的參數不同,但取得的 cache 資料卻都一樣...這樣還滿蝦的
# 所以需要用 memoize 來修飾才會連參數也存起來
@cache.memoize(timeout=50)
def create_list(num):
    print('method create_list called')
    l = []
    for i in range(num):
        l.append(str(i))
    return l

@app.route('/list/<int:num>')
def list(num):
    return ', '.join(create_list(num))

4.清除 cache

cache.delete('get_list')                     # 刪除 'get_list' cache
cache.delete_many('get_list', 'view_hello')  # 同時刪除 'get_list' 和 'view_hello' cache
cache.delete_memoized('create_list', 5)      # 刪除 'create_list' 函數並且參數為5的 cahce
cache.clear()                                # 清除所有 cache

results matching ""

    No results matching ""