在redis中保存session CRUD

  1. 代码功能概述
    • 这段代码展示了如何使用Flask框架将用户会话(session)数据保存到Redis中。它利用了flask - redisflask - session两个扩展库,实现了将Flask应用的会话数据高效地存储在Redis数据库中。
  2. 导入模块
    from flask import Flask
    from flask_redis import FlaskRedis
    from flask_session import Session
    from flask import session
    
    • Flask是核心的Web应用框架。
    • FlaskRedis用于在Flask应用中方便地集成Redis。
    • Session来自flask - session,用于管理会话存储。
    • session用于在Flask应用中操作会话数据。
  3. 创建实例
    app = Flask(__name__, template_folder="templates", static_folder="static")
    redis0 = FlaskRedis(config_prefix="REDIS")
    redis1 = FlaskRedis(config_prefix="SESSION_REDIS")
    session_store = Session()
    
    • 创建了Flask应用实例app,并指定了模板文件夹和静态文件文件夹。
    • 创建了两个FlaskRedis实例redis0redis1,分别用于不同的Redis配置,config_prefix用于区分不同的配置前缀。
    • 创建了Session实例session_store,用于管理会话存储。
  4. 配置部分
    app.config.update({
        "DEBUG": True,
        "SECRET_KEY": "*(%#4sxcz(^(#$#8423",
        "REDIS_URL": "redis://:123456@127.0.0.1:6379/0",
        "SESSION_REDIS_URL": "redis://:123456@127.0.0.1:6379/1",
        "SESSION_TYPE": "redis",
        "SESSION_PERMANENT": True,
        "SESSION_USE_SIGNER": True,
        "SESSION_KEY_PREFIX": "session:",
        "SESSION_REDIS": redis1
    })
    
    • 通用配置
      • DEBUG: True开启调试模式,方便开发过程中查看错误信息。
      • SECRET_KEY是用于加密会话数据的密钥,必须设置且保密,以防止会话数据被篡改。
    • Redis配置
      • REDIS_URL配置了一个Redis连接地址,这里用于redis0实例,连接到本地Redis服务器,密码为123456,端口为6379,使用数据库0
      • SESSION_REDIS_URL配置了另一个Redis连接地址,用于redis1实例,连接到同一台Redis服务器,但使用数据库1,专门用于存储会话数据。
    • 会话配置
      • SESSION_TYPE: "redis"指定使用Redis作为会话存储类型。
      • SESSION_PERMANENT: True设置为True时,关闭浏览器会话就会失效。
      • SESSION_USE_SIGNER: True对发送到浏览器的会话cookie值添加签名,增强数据安全性,防止被篡改。
      • SESSION_KEY_PREFIX: "session:"设置会话在Redis中存储的键的前缀为session:
      • SESSION_REDIS: redis1指定使用redis1实例来连接Redis存储会话数据。
  5. 初始化实例
    redis0.init_app(app)
    redis1.init_app(app)
    session_store.init_app(app)
    
    • 先初始化两个FlaskRedis实例redis0redis1,将它们与Flask应用关联起来。
    • 然后初始化session_store,注意要在Redis实例初始化之后进行,确保Redis连接可用。
  6. 定义路由
    • /路由
      @app.route("/")
      def index():
          return "ok"
      
      返回简单的“ok”响应,作为应用的默认路由。
    • /set路由
      @app.route("/set")
      def set_session():
          session["uname"] = "xiaoming"
          session["age"] = 18
          return "ok"
      
      在会话中设置两个键值对,uname对应值为xiaomingage对应值为18,这些数据会被保存到Redis中。
    • /get路由
      @app.route("/get")
      def get_session():
          print(session.get("uname"))
          print(session.get("age"))
          return "ok"
      
      从会话中获取unameage的值并打印,获取的数据是从Redis中读取并反序列化后的结果。
    • /del路由
      @app.route("/del")
      def del_session():
          print(session.pop("uname"))
          print(session.pop("age"))
          return "ok"
      
      从会话中删除unameage键值对,这里的删除是直接删除保存在Redis中的对应会话数据。当所有会话数据被删除,对应的Redis键也会消失。
  7. 启动应用
    if __name__ == '__main__':
        app.run()
    
    确保脚本直接运行时,启动Flask应用。
posted @ 2025-03-26 18:46  千陌666  阅读(23)  评论(0)    收藏  举报