在GAE + Flask中使用托管的Memcache作为会话存储
概括
因为在GAE+flask中将会话存储从Cookie改为Memcache,所以要记下操作步骤。
起初使用Cookie可能没有问题,但如果存储在会话中的数据量增加,可能会导致大小不足而出现错误。
* 在flask中,Cookie只能存储4kb的数据。
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')
谷歌的appengine.api.memcache库已经提供了一个与memcached兼容的库。
只需直接将导入的模块指定为MemcachedSessionInterface的客户端,即可无需特别关注认证等问题,连接到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,因此如果是为了管理会话存储而使用,直接传递该模块可能更好。