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

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

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

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

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

===============>>#1 票数:2

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

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

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

===============>>#2 票数: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

===============>>#3 票数:0

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

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

  ask by hllau translate from so

未解决问题?本站智能推荐: