從文檔http://flask-kvsession.readthedocs.org/en/0.3.1/在cleanup_sessions()
,它表示應該定期調用此方法來清理過期的會話。如何使用Flask-KVSession管理清理過期的會話?
這是否意味着如果我不清除它,會話內存使用量將在應用程序的生命週期中擴展?
如果我不定期清理它們,有什麼不好的影響?
在應用程序中安排定期清理的一些好方法是什麼?
我可以使用Redis作爲存儲後端並自動設置到期日嗎?
從文檔http://flask-kvsession.readthedocs.org/en/0.3.1/在cleanup_sessions()
,它表示應該定期調用此方法來清理過期的會話。如何使用Flask-KVSession管理清理過期的會話?
這是否意味着如果我不清除它,會話內存使用量將在應用程序的生命週期中擴展?
如果我不定期清理它們,有什麼不好的影響?
在應用程序中安排定期清理的一些好方法是什麼?
我可以使用Redis作爲存儲後端並自動設置到期日嗎?
您可以使用Redis,但它仍會存儲過期的會話。存儲過期會話的含義是您會浪費磁盤空間或RAM,這對Redis來說尤其糟糕。
至於計劃清理,只需創建一個每日腳本與cron或upstart運行cleanup_sessions
。或者,你也可以修改simplekv
對鍵設置過期時間:https://github.com/mbr/simplekv/blob/master/simplekv/memory/redisstore.py
如果使用RedisStore,KVSession會選燒瓶配置項PERMANENT_SESSION_LIFETIME和自動完成會話清理。僅適用於不支持TimeToLiveMixin界面的後端,您必須手動完成。
到期會話 會話將失效,導致它們失效。要自動從後端移除,該後端必須支持TimeToLiveMixin接口;支持它的示例後端是RedisStore和MemcacheStore。
當使用不支持生存時間的不同後端時,例如通過FilesystemStore生成平面文件時,可定期調用cleanup_sessions()以刪除未使用的會話。
您可以註冊'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:[email protected]/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
我覺得'cleanup_sessions'需要在應用程序的同一個實例中運行?一個Cron運行'cleanup_sessions'本身沒有關於應用程序的上下文知識將工作? – hllau
您可以創建一個運行''cleanup_sessions''的路由並在該路由上運行wget的cron作業。 – imsky
這是一個很好的伎倆。 – hllau