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容器?