FastAPI 学习之路(五十五)操作Redis

之前我们分享了操作关系型数据库,具体文章,

   FastAPI 学习之路(三十二)创建数据库

   FastAPI 学习之路(三十三)操作数据库

    FastAPI 学习之路(三十四)数据库多表操作

     这次我们分享的是非关系型数据库--Redis。

首先,我们需要安装对应的依赖

pip install aioredis==1.3.1

接下来,我们去导入创建对应的链接

from starlette.requests import Request
from fastapi import FastAPI, Query
from aioredis import Redis, create_redis_pool


app = FastAPI()


async def create_redis() -> Redis:
    return await create_redis_pool(f"redis://:@10.30.10.36/0?encoding=utf-8")


@app.on_event("startup")
async def startup_event():
    app.state.redis = await create_redis()
    print("init redis success")


@app.on_event("shutdown")
async def shutdown_event():
    app.state.redis.close()
    await app.state.redis.wait_closed()
    print("redis closed")

这里我们就用到了上一篇中分享的startup和shutdown事件。接下来,我们去创建一个api操作redis,看是否能够生效:
 

### 如何在 FastAPI 中使用 Celery 和 Redis 为了实现 FastAPI 项目中集成 Celery 和 Redis 的需求,以下是详细的说明: #### 1. 安装依赖项 首先需要安装 `fastapi`、`uvicorn`、`celery` 和 `redis-py` 库。可以通过以下命令完成安装: ```bash pip install fastapi uvicorn celery redis ``` #### 2. 配置 Celery 实例 创建一个文件名为 `celery_app.py` 的模块来定义 Celery 实例并配置其连接到 Redis。 ```python from celery import Celery # 使用 Redis 作为消息代理和结果存储后端 CELERY_BROKER_URL = 'redis://localhost:6379/0' CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' # 创建 Celery 实例 celery_app = Celery('worker', broker=CELERY_BROKER_URL, backend=CELERY_RESULT_BACKEND) # 可选:加载默认配置 celery_app.conf.update( task_serializer='json', accept_content=['json'], result_serializer='json', timezone='UTC', enable_utc=True, ) ``` 此部分代码通过指定 Redis URL 来初始化 Celery 并设置序列化器和其他选项[^2]。 #### 3. 定义异步任务 在单独的任务模块(如 `tasks.py`)中定义具体的 Celery 任务逻辑。 ```python from celery_app import celery_app @celery_app.task def add(x, y): return x + y ``` 这里展示了如何基于已有的 Celery 实例注册一个新的任务函数 `add()`,它接受两个参数并将它们相加返回结果[^1]。 #### 4. 启动 Celery Worker 运行下面的命令启动 Celery worker 进程监听来自队列的新任务请求。 ```bash celery -A celery_app.celery_app worker --loglevel=info ``` 这一步非常重要,因为它负责实际执行由 API 调度过来的工作单元[^2]。 #### 5. 整合至 FastAPI 应用程序 最后,在主应用程序入口处调用这些后台作业服务。例如修改如下所示的一个简单 RESTful 接口用于触发远程计算操作: ```python from fastapi import FastAPI import tasks app = FastAPI() @app.post("/compute/") async def compute(): # 发送任务给 Celery 处理 future_result = tasks.add.delay(4, 8) return {"task_id": str(future_result), "status":"Processing"} ``` 当客户端向 `/compute/` POST 请求时,服务器会立即将该工作委派出去而不等待最终答案立即响应成功状态码以及唯一标识符以便稍后查询进度或获取成果[^2]。 --- ### 注意事项 - **环境变量管理**: 如果不想硬编码敏感数据比如密码之类的建议采用 `.env` 文件配合 python-dotenv 扩展包读取外部配置替代固定字符串形式写死进去的做法更加安全灵活可控性强一些. - **错误处理机制设计合理完善**, 对可能出现的各种异常情况要有预见性和针对性解决方案以免影响用户体验甚至造成系统崩溃等问题发生.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值