AWS EC2にFlask-Cachingを使ってRedisでビューキャッシュをしてみた


はじめに

機械学習やら色々な新しい事を実践的に試すべく
エロサイトを開発中。あなろぼ
開発実践用にオープンしているので広告は入っておりませんのでお気軽にどうぞ。
色々工夫したアプリケーションの作りになっているのでレスポンスは速いはず。

アプリケーション構成

このサイトの構成は下記になっています。
Nginx
Uwsgi
Flask(Python)
MongoDB

今回トライしたこと

1.Redisの導入
2.Flaskのビューをキャッシュ

1.Amazon Linux2にRedisをインストール

sudo amazon-linux-extras install redis4.0
sudo systemctl enable redis.service
sudo systemctl start redis.service

今回は動作すればOKなのでこれだけでおk
細かい設定は他を参照
この辺りを参照しました。
http://www.denet.ad.jp/technology/2017/11/redis-centos7.html

2.Flaskのビューをキャッシュ

必要なパッケージのインストール。

sudo pip install Flask-Caching
sudo pip install redis

from flask import Flask
from flask_caching import Cache

app = Flask(__name__)

# Cacheインスタンスの作成
cache = Cache(app, config={
    'CACHE_TYPE': 'redis',
    'CACHE_DEFAULT_TIMEOUT': 60,
    'CACHE_REDIS_HOST': 'localhost',
    'CACHE_REDIS_PORT': 6379,
})

@app.route('/')
@cache.cached()

・flask_cachingを呼び出し
・Cacheインスタンスの作成
・アプリケーションのルートの下に「@cache.cached()」を記述するだけ

これだけで自動的にビューをredisにキャッシュしてくれます。

キャッシュにパラメータを指定できます。
timeout: キャッシュの有効期間 (秒) デフォルトはインスタンス作成時のもの
key_prefix: キーのプリフィックスで、デフォルトでは"view/リクエストパス"
query_string: Trueの場合、クエリパラメータが異なるリクエストはクエリパラメータを含むハッシュ値をキーとしてキャッシュされます (デフォルトはFalseで、クエリパラメータが異なっても同一のキーが使われる)リストとかクエリでビューを変更している場合はこちらをTrueにしましょう

うん、めちゃくちゃ速くなった(気がする?)

見てみてくださいな
あなろぼ