跳转至

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

系统架构

  • 项目由 NginxPythonMysqlRedis 容器组成。
  • 容器应用使用 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 服务器中的缓存数据。

参考

回到页面顶部