Flask 框架中使用 Redis (一)
2021-12-13 by dongnan
环境描述
项目结构
tree -d -L 1 ./
./
├── app
├── backtest
├── data
├── docker
├── spider
└── uploads
6 directories
软件版本
python 3.6
flask 1.1
mysql 3.6
redis 3.2
系统架构
- 项目由 Nginx、Python、Mysql、Redis容器组成。
- 容器应用使用 docker-compose进行编排。
准备 redis 服务器
docker-compose
docker-compose 配置文件 redis 服务器部分定义:
  # 部分省略...  
  pds-rds:
    image: redis:3
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - rds-data:/data
    ports:
      - "6379:6379"
    environment:
      - TZ=Asia/Chongqing
    command:
      - "--appendonly yes"
      - "--requirepass ThisPassword"
部署 redis 服务命令如下:
docker-compose up -d
测试数据
登录 redis 创建一些测试数据:
telnet 192.168.xx.250 6379
Trying 192.168.150.250...
Connected to 192.168.xx.250.
Escape character is '^]'.
auth ThisPassword    # 密码
+OK
keys *
*0
set name dongnan
+OK
set age 18
+OK
set city beijing
+OK
dbsize
:3
quit
+OK
准备 redis 客户端
安装
python 中的 redis 客户端,使用的是 flask-redis 扩展:
pip install flask-redis
配置
在项目的构造文件 __init__.py 初始化 redis 扩展:
redis_client = FlaskRedis()
def create_app():
    app = Flask(__name__)
    redis_client.init_app(app)
    return app
在项目的配置文件 settings.py,添加 redis 服务器的信息:
rds_server = os.getenv('RDS_SERVER', '192.168.xx.250')
rds_pwd = os.getenv('RDS_PWD', 'ThisPassword')
class DevelopmentConfig(BaseConfig):
    SQLALCHEMY_DATABASE_URI = 'mysql://%s:%s@%s:3306/%s?charset=utf8' % (db_user, db_pwd, db_server, db_database)
    REDIS_URL = 'redis://:%s@%s:6379/0' % (rds_pwd, db_server)
验证
这里使用蓝本对象组织视图函数:
from flask import Blueprint, render_template, request
from app.extensions import redis_client
# 蓝本
index_bp = Blueprint('indexes', __name__)
# 测试 redis 的视图函数
@index_bp.route('/test')
def redis():
    return redis_client.get('name')
访问 flask 服务端,成功获得 redis 服务器中的缓存数据。

参考
- https://github.com/underyx/flask-redis
- 如何创建持久化 Redis Docker容器?