python创建redis连接池

一、结合fastapi的异步使用

1.整体流程

复制代码
# 1. 导入所有依赖包 (import fastapi, import redis.asyncio...)

# 2. 配置Redis常量 (REDIS_HOST/REDIS_PORT/密码...)

# 3. 创建Redis连接池 → redis_pool = redis.ConnectionPool(...)

# 4. 创建全局Redis客户端 → redis_client = redis.Redis(...)

# 5. 创建FastAPI实例 → app = FastAPI(...)

# 6. 你的这两段生命周期代码,就写在这里

# 7. 写你的所有接口路由 (@app.get/ @app.post...)

2.创建redis客户端

复制代码
# ========== 注意:异步导入的是 redis.asyncio ==========
import redis.asyncio as redis

# Redis 配置和同步完全一致,无需修改
REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
REDIS_PASSWORD = ""
REDIS_DB = 0
REDIS_ENCODING = "utf-8"

# 1. 创建【异步】Redis 连接池
redis_pool = redis.ConnectionPool(
    host=REDIS_HOST,
    port=REDIS_PORT,
    password=REDIS_PASSWORD,
    db=REDIS_DB,
    encoding=REDIS_ENCODING,
    decode_responses=True  # 同样自动转字符串,必备配置
)

# 2. 创建全局的【异步】Redis 客户端
redis_client = redis.Redis(connection_pool=redis_pool)

print(redis_client)


from fastapi import FastAPI
# ========== 注意:异步导入的是 redis.asyncio ==========
import redis.asyncio as redis

# Redis 配置和同步完全一致,无需修改
REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
REDIS_PASSWORD = ""
REDIS_DB = 0
REDIS_ENCODING = "utf-8"

# 1. 创建【异步】Redis 连接池
redis_pool = redis.ConnectionPool(
    host=REDIS_HOST,
    port=REDIS_PORT,
    password=REDIS_PASSWORD,
    db=REDIS_DB,
    encoding=REDIS_ENCODING,
    decode_responses=True  # 同样自动转字符串,必备配置
)

# 2. 创建全局的【异步】Redis 客户端
redis_client = redis.Redis(connection_pool=redis_pool)

# 初始化 FastAPI 实例
app = FastAPI(title="FastAPI Redis 异步操作示例(推荐)")

3.生命周期定义

复制代码
# @app.on_event("startup") 启动事件函数

# 触发时机:你的 FastAPI 项目刚启动的一瞬间
# (执行 uvicorn main:app --reload 后,项目加载完成的那一刻),这个函数会自动执行一次,只执行一次。


# @app.on_event("shutdown") 关闭事件函数
# 触发时机:你的 FastAPI 项目被手动关闭的一瞬间
# (比如停止服务、服务器重启 / 关机、项目部署重启),这个函数会自动执行一次。

# ========== 异步 Redis 生命周期 ==========

#如果没有这个 ping() 检测,你的项目启动时不会报错,客户端也确实初始化好了,
但是当用户第一次调用 /redis/set 接口时,才会发起第一次真实连接,
如果此时 Redis 配置错了 / 服务没开,接口会直接报错 500,用户体验极差

@app.on_event("startup")
async def startup_event():
    """项目启动时,检查 Redis 连接"""
    try:
        await redis_client.ping()
        print("✅ Redis 异步连接成功!")
    except Exception as e:
        print(f"❌ Redis 异步连接失败:{e}")
        raise e

@app.on_event("shutdown")
async def shutdown_event():
    """项目关闭时,关闭 Redis 连接池"""
    await redis_client.close()
    print("✅ Redis 连接池已优雅关闭")
相关推荐
AllData公司负责人32 分钟前
AllData数据中台-数据同步平台【Seatunnel-Web】整库同步MySQL同步Doris能力演示
大数据·数据库·mysql·开源
加油,小猿猿40 分钟前
Java开发日志-双数据库事务问题
java·开发语言·数据库
山岚的运维笔记1 小时前
SQL Server笔记 -- 第20章:TRY/CATCH
java·数据库·笔记·sql·microsoft·sqlserver
Gain_chance1 小时前
33-学习笔记尚硅谷数仓搭建-DWS层交易域用户粒度订单表分析及设计代码
数据库·数据仓库·hive·笔记·学习·datagrip
清风拂山岗 明月照大江2 小时前
Redis笔记汇总
java·redis·缓存
未来之窗软件服务2 小时前
计算机等级考试—高频英语词汇—东方仙盟练气期
数据库·计算机软考·东方仙盟
lekami_兰2 小时前
MySQL 长事务:藏在业务里的性能 “隐形杀手”
数据库·mysql·go·长事务
JQLvopkk2 小时前
C# 轻量级工业温湿度监控系统(含数据库与源码)
开发语言·数据库·c#
消失的旧时光-19433 小时前
第十四课:Redis 在后端到底扮演什么角色?——缓存模型全景图
java·redis·缓存
devmoon3 小时前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡