首页 > 数据库 >Fastapi使用redis

Fastapi使用redis

时间:2024-11-13 15:29:41浏览次数:1  
标签:get Fastapi app redis value key 使用 router

异步版本 rediss.py

from fastapi import FastAPI, Depends,APIRouter
import redis.asyncio as aioredis
import uvicorn
from contextlib import asynccontextmanager
 
app = FastAPI()
 
# Redis 连接池配置
REDIS_URL = "redis://192.168.252.128:6379/0"
 
@asynccontextmanager
async def lifespan(app: FastAPI):
    # 初始化 Redis 客户端
    app.state.redis = await aioredis.from_url(REDIS_URL)
    yield
    # 关闭 Redis 连接
    await app.state.redis.close()
 
app.router.lifespan_context = lifespan
 
def get_redis_client():
    return app.state.redis
 
router = APIRouter()
 
@router.get("/set/{key}/{value}")
async def set_key(key: str, value: str, redis: aioredis.Redis = Depends(get_redis_client)):
    await redis.set(key, value)
    return {"message": f"Key {key} set to {value}"}
 
@router.get("/get/{key}")
async def get_key(key: str, redis: aioredis.Redis = Depends(get_redis_client)):
    value = await redis.get(key)
    if value:
        return {"key": key, "value": value.decode()}
    else:
        return {"message": f"Key {key} not found"}
 
app.include_router(router)
 
if __name__ == "__main__":
    uvicorn.run("rediss:app", host="0.0.0.0", port=8089, reload=True, )

异步连接池版本

from fastapi import FastAPI, Depends, APIRouter
import aioredis
import uvicorn
from contextlib import asynccontextmanager

app = FastAPI()
# Redis 连接池配置
REDIS_URL = "redis://192.168.252.128:6379/0"
@asynccontextmanager
async def lifespan(app: FastAPI):
    # 初始化 Redis 连接池
    app.state.redis_pool = await aioredis.from_url(REDIS_URL)
    try:
        yield
    finally:
        # 关闭 Redis 连接池
        app.state.redis_pool.close()
        await app.state.redis_pool.wait_closed()

app.router.lifespan_context = lifespan

async def get_redis_client():
    async with app.state.redis_pool as redis:
        return redis

router = APIRouter()

@router.get("/set/{key}/{value}")
async def set_key(key: str, value: str, redis: aioredis.Redis = Depends(get_redis_client)):
    await redis.set(key, value)
    return {"message": f"Key {key} set to {value}"}

@router.get("/get/{key}")
async def get_key(key: str, redis: aioredis.Redis = Depends(get_redis_client)):
    value = await redis.get(key)
    if value:
        return {"key": key, "value": value.decode()}
    else:
        return {"message": f"Key {key} not found"}

app.include_router(router)

if __name__ == "__main__":
    uvicorn.run("rediss:app", host="0.0.0.0", port=8089, reload=True, )

标签:get,Fastapi,app,redis,value,key,使用,router
From: https://www.cnblogs.com/qcy-blog/p/18544076

相关文章

  • 【Git】最详细的git使用(适用于新手小白)
    一、Git介绍与安装Git(读音为/gɪt/)是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到超大型项目的所有项目。先将本地的文件添加到缓存区,然后提交到本地库,然后上传推送到远程仓库1)下载:https://git-scm.com/downloadswin系统Redirecting…mac系统https://......
  • vue3使用tsParticles实现爆开五彩碎纸屑动效,简单高效免费(撒花特效、粒子效果)
    实现效果:tsParticles|ConfettiPreset|JavaScriptParticles,ConfettiandFireworksanimationsforyourwebsitetsParticles-Easilycreatehighlycustomizableparticles,confettiandfireworksanimationsandusethemasanimatedbackgroundsforyourweb......
  • Python 桌面应用开发:使用 Tkinter 创建 GUI 应用程序
    Python桌面应用开发:使用Tkinter创建GUI应用程序引言随着计算机技术的飞速发展,桌面应用程序依然在许多领域中发挥着重要作用。Python作为一种强大的编程语言,提供了多种工具和库来创建桌面应用程序。其中,Tkinter是Python的标准GUI(图形用户界面)库,易于使用且功能强......
  • 使用Websocket构建小型的IM通讯程序
    目录目录使用PWA构建小型的IM通讯程序简介项目地址界面预览技术栈服务端支持的协议前端总结使用PWA构建小型的IM通讯程序简介使用Websocket、MQTT协议构建小型的IM通信程序,可用于物联网或及时通信等,通过PWA技术,安装到用户手机桌面,提高用户整体交互感。项目地......
  • 室内PPR水管与室外PPR水管的区别主要体现在材料选择、耐候性、安装方式以及使用环境等
    室内PPR水管与室外PPR水管的区别主要体现在材料选择、耐候性、安装方式以及使用环境等方面。PPR(聚丙烯随机共聚物)水管作为一种广泛应用于家装和建筑工程中的管材,具有耐腐蚀、耐高温、无毒环保等优点。然而,由于室内和室外的环境和使用要求不同,PPR水管在设计和生产时会有所区别。1.......
  • kafka(启动集群,使用spring方法,自定义配置)
    ApacheKafka是一个开源的分布式流处理平台,最初由LinkedIn开发,后来成为Apache项目。Kafka主要用于高吞吐量、低延迟的实时数据流处理,常用于日志收集、实时分析、消息传递等场景。以下是关于Kafka的详细讲解:一、理论知识1.Kafka的基本概念Kafka是一个分布式的......
  • 在 Windows 系统中,可以使用内置的命令行工具来分割和合并大文件,虽然没有专门的 split
    在Windows系统中,可以使用内置的命令行工具来分割和合并大文件,虽然没有专门的split命令(类似于Linux中的split命令),但可以通过一些其他方式实现这一功能。以下是一些常用方法:1.使用 fsutil 命令分割大文件fsutil是Windows提供的一个工具,可以用于管理文件系统,但并不直......
  • 使用 PowerShell 创建多个 .reg 文件进行分段(切片)并且能够在执行时按顺序合并并执行,我
    使用PowerShell创建多个.reg文件进行分段(切片)并且能够在执行时按顺序合并并执行,我们可以按照以下步骤进行:目标:将一个大的 .reg 文件分割成多个小文件。每个小文件(分段)都将是一个有效的 .reg 文件,可以独立执行。使用PowerShell自动生成这些分段 .reg 文件,并执行它......
  • 使用ComfyUI工作流进行图片打标的简易教程(附工作流)
    目前lora训练有很多很好的打标工具,这次尝试使用comfyui工作流进行打标,使用的模型是MiniCPMv2.6,面壁者的小刚炮工作流地址https://github.com/pzc163/Comfyui_MiniCPMv2_6-prompt-generator安装与准备安装插件:在ComfyUIManager中搜索并安装“MiniCPMv2_6-prompt-g......
  • 使用 Flux 模型放大图片的 ComfyUI 工作流(附工作流)
    大家好!今天我很高兴与大家分享一个使用Flux模型放大图片的ComfyUI工作流。在这篇文章中,我们将介绍如何设置这个工作流、其独特功能,并一步一步教你如何使用它来获得高质量的放大效果。效果展示:工作流简介该工作流使用Flux模型对图片进行放大,同时保持高倍放大后的......