一个flask项目里,有2个实例,如果我把session放到redis中,是否可以实现2个应用程序session共享?
时间: 2024-01-28 22:02:45 浏览: 21
是的,如果您将 Flask 应用程序的 session 存储到 Redis 中,可以实现多个应用程序之间 session 的共享。这是因为 Redis 是一个独立的数据存储,可以被多个应用程序实例共同访问和修改。
要将 Flask 应用程序的 session 存储到 Redis 中,您可以使用 Flask-Session 扩展。这个扩展可以让您轻松地将 Flask 应用程序的 session 存储到 Redis、Memcached 或其他外部存储中。
下面是一个使用 Flask-Session 将 session 存储到 Redis 中的示例代码:
```python
from flask import Flask, session
from flask_session import Session
from redis import Redis
# 创建第一个应用程序实例
app1 = Flask(__name__)
# 设置 Redis 数据库配置
app1.config['SESSION_TYPE'] = 'redis'
app1.config['SESSION_REDIS'] = Redis(host='localhost', port=6379)
# 初始化 Session 扩展
Session(app1)
@app1.route('/')
def index():
# 设置 session 数据
session['foo'] = 'bar'
return 'Hello from app1!'
# 创建第二个应用程序实例
app2 = Flask(__name__)
# 设置 Redis 数据库配置
app2.config['SESSION_TYPE'] = 'redis'
app2.config['SESSION_REDIS'] = Redis(host='localhost', port=6379)
# 初始化 Session 扩展
Session(app2)
@app2.route('/')
def index():
# 获取 session 数据
foo = session.get('foo')
return f'Hello from app2! Session data: {foo}'
if __name__ == '__main__':
# 启动第一个应用程序实例
app1.run(port=8000)
# 启动第二个应用程序实例
app2.run(port=8001)
```
在这个示例中,我们使用 Flask-Session 扩展将应用程序的 session 存储到 Redis 中。在每个应用程序实例中,我们都设置了相同的 Redis 数据库配置,这样就可以让这两个应用程序实例共享相同的 session 数据。在第一个应用程序实例中,我们将一个名为 `foo` 的 session 变量设置为 `'bar'`。在第二个应用程序实例中,我们获取了 `foo` session 变量的值,并将其输出到页面上。
需要注意的是,使用 Flask-Session 扩展将 session 存储到 Redis 中,需要安装 `redis` 库。在示例代码中,我们使用 `redis` 库连接 Redis 数据库。如果您使用其他 Redis 客户端库,可以相应地修改连接代码。