5

从文档http://flask-kvsession.readthedocs.org/en/0.3.1/ at cleanup_sessions(),它说应该定期调用这个方法来清理过期的会话。

这是否意味着如果我不清理它,会话内存使用量会在应用程序的生命周期内扩大?

如果我不定期清理它们会有什么不好的影响?

在应用程序中安排定期清理的一些好方法是什么?

我可以使用 Redis 作为存储后端并自动设置到期时间吗?

4

3 回答 3

2

如果你使用 RedisStore,KVSession 会选择烧瓶配置项 PERMANENT_SESSION_LIFETIME 并自动进行会话清理。仅对于不支持 TimeToLiveMixin 接口的后端,您必须手动完成。

过期会话会话将过期,导致它们无效。要自动从后端移除,该后端必须支持 TimeToLiveMixin 接口;支持此功能的示例后端是 RedisStore 和 MemcacheStore。

当使用没有生存时间支持的不同后端时,例如通过 FilesystemStore 的平面文件,可以定期调用 cleanup_sessions() 以删除未使用的会话。

于 2015-07-28T06:46:35.090 回答
2

您可以注册一个“after_request”或“before_request”来定期处理清理。

from flask import Flask

from flask.ext.kvsession import KVSessionExtension
from simplekv.db.sql import SQLAlchemyStore
from sqlalchemy import create_engine, MetaData

# init app
app = Flask(__name__)

# init Flask-KVSession
engine = create_engine('mysql+pymysql://user:password@localhost/kvsession_db')
metadata = MetaData(bind=engine)
store = SQLAlchemyStore(engine, metadata, 'kvsession_table')
metadata.create_all()
kvsession_extension = KVSessionExtension(store, app)

# perdiocally cleanup expired sessions
import time
# do cleanup per day. You may store this value in app.config
SESSION_CLEANUP_INTERVAL = 60 * 60 * 24
deadline = None
@app.after_request
def cleanup_expired_sessions():
    global SESSION_CLEANUP_INTERVAL, deadline
    if deadline is None:
        kvsession_extension.cleanup_sessions(app)
        deadline = time.time() = SESSION_CLEANUP_INTERVAL
    else:
        if time.time() >= deadline:
            # time to do cleanup
            kvsession_extension.cleanup(app)
            # update deadline
            deadline = time.time() + SESSION_CLEANUP_INTERVAL
于 2016-03-30T07:35:33.087 回答
0

您可以使用 Redis,但它仍会存储过期的会话。存储过期会话的含义是您将浪费磁盘空间或 RAM,这对 Redis 尤其不利。

至于安排清理,只需使用运行的 cron 或 upstart 创建一个每日脚本cleanup_sessions。或者,您也可以修改simplekv以设置密钥的到期时间:https ://github.com/mbr/simplekv/blob/master/simplekv/memory/redisstore.py

于 2013-04-24T21:26:33.333 回答