LoginSignup
3
2

More than 5 years have passed since last update.

GAE+flaskでセッションストアにマネージドMemcacheを使う

Last updated at Posted at 2019-02-25

概要

GAE+flaskでsessionストアをcookieからMemcacheに変更したので作業手順をメモ。
cookieでも初めは困りませんが、sessionに格納するデータが増えてくると、 サイズが足りなくなりエラーが発生する可能性があります。
※flaskでは4kbyteまでしかcookieに格納できません。

UserWarning: The "session" cookie is too large

GAEにはマネージドなMemcacheサービスが用意されているのでそちらに移行します。

Flask-sessionをインストール

pip install -t lib Flask-Session

flaskのセッションインターフェースを差し替え

from flask import Flask
from flask_session.sessions import MemcachedSessionInterface
from google.appengine.api import memcache

app = Flask(__name__)
app.session_interface = MemcachedSessionInterface(client=memcache, key_prefix='memsession')

google.appengine.api.memcacheにmemcached互換のライブラリが用意されています。
importしたモジュールをそのままMemcachedSessionInterfaceのclientに指定すれば認証等は特に意識せず、GAEのマネージドMemcacheに接続できます。
dev_appserver.pyを使用したローカル環境での開発でも、上記だけでMemcacheのエミュレーターに接続しに行ってくれます。
(GAE便利ですね…!)

また、memcache.Client()として自分でクライアントを作成することもできます。

app.session_interface = MemcachedSessionInterface(client=memcache.Client(), key_prefix='memsession')

ただし、完全なmemcached互換では無いため、いくつかの引数は設定しても無視されます。

# こんなことをしたとしてもGAEのmemcachedに接続しに行く
app.session_interface = MemcachedSessionInterface(client=memcache.Client(servers=['10.0.0.0.0.0.0.1:11211']), key_prefix='memsession')

また、スレッドセーフでは無いAPIも存在するので、セッションストアの管理目的の場合、そのままモジュールを渡すのが良いでしょう。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2