python redis链接封装
封装 Redis 连接可以让你的应用程序代码更加整洁,同时便于管理和维护。以下是如何在 Python 中封装 Redis 连接的一个示例,特别适用于 FastAPI 应用程序。我们将创建一个 Redis 客户端类来管理连接,并确保其易于配置和使用。
1. 创建 Redis 客户端封装
首先,我们创建一个 Redis 客户端的封装类,该类负责初始化连接并提供一些基本操作方法(如设置、获取键值)。
Python
import redis from typing import Optional, Any class RedisClient: def __init__(self, host: str = 'localhost', port: int = 6379, password: Optional[str] = None, db: int = 0): """ 初始化 Redis 客户端。 :param host: Redis 服务器地址,默认为 localhost。 :param port: Redis 服务器端口,默认为 6379。 :param password: Redis 密码,默认为 None。 :param db: 使用的数据库编号,默认为 0。 """ try: self.client = redis.Redis(host=host, port=port, password=password, db=db, decode_responses=True) # 测试连接 if not self.client.ping(): raise Exception("无法连接到 Redis 服务器") print("Redis 连接成功") except Exception as e: print(f"Redis 连接失败: {e}") raise def set_key(self, key: str, value: Any) -> bool: """ 设置 Redis 键值对。 :param key: 键名。 :param value: 值。 :return: 操作是否成功。 """ try: return self.client.set(key, value) except Exception as e: print(f"设置键值对时出错: {e}") return False def get_key(self, key: str) -> Optional[Any]: """ 获取 Redis 键对应的值。 :param key: 键名。 :return: 键对应的值或 None 如果键不存在。 """ try: return self.client.get(key) except Exception as e: print(f"获取键值时出错: {e}") return None def delete_key(self, key: str) -> bool: """ 删除 Redis 中的键。 :param key: 要删除的键名。 :return: 操作是否成功。 """ try: return self.client.delete(key) > 0 except Exception as e: print(f"删除键时出错: {e}") return False
2. 在 FastAPI 中使用 Redis 客户端
接下来,在 FastAPI 应用中使用这个封装好的 Redis 客户端。我们可以将其作为依赖项注入到需要的地方。
Python
from fastapi import FastAPI, Depends, HTTPException app = FastAPI() # 初始化 Redis 客户端 redis_client = RedisClient(host="your_redis_host", port=6379, password="your_redis_password", db=0) @app.get("/") def read_root(): return {"message": "Hello, FastAPI with Redis!"} @app.post("/set/{key}/{value}") def set_key_value(key: str, value: str, redis_conn: RedisClient = Depends(lambda: redis_client)): success = redis_conn.set_key(key, value) if not success: raise HTTPException(status_code=500, detail="Failed to set key-value pair.") return {"message": f"Set {key} to {value}"} @app.get("/get/{key}") def get_key_value(key: str, redis_conn: RedisClient = Depends(lambda: redis_client)): value = redis_conn.get_key(key) if value is None: return {"message": "Key not found"} else: return {"key": key, "value": value} @app.delete("/delete/{key}") def delete_key(key: str, redis_conn: RedisClient = Depends(lambda: redis_client)): success = redis_conn.delete_key(key) if not success: raise HTTPException(status_code=404, detail="Key not found or failed to delete.") return {"message": f"Deleted {key}"}
3. 运行应用
确保你已经安装了所有必要的库:
Bash
pip install fastapi uvicorn redis
然后运行你的 FastAPI 应用:
Bash
uvicorn your_script_name:app --reload
将 your_script_name 替换为你保存上述代码的文件名(不包括 .py 扩展名)。例如,如果你的文件名为 main.py,则命令应为:
Bash
uvicorn main:app --reload
总结
RedisClient 类:封装了 Redis 的连接逻辑以及常用的操作方法(设置、获取、删除键值对),使得代码更易于维护。
FastAPI 集成:通过 FastAPI 的依赖注入机制 (Depends) 将 Redis 客户端实例传递给各个路由处理函数,这样可以保持 Redis 连接的一致性和高效性。
错误处理:每个操作都包含了基本的异常处理,确保即使出现错误也能给客户端一个清晰的反馈。
这种设计不仅提高了代码的可读性和可维护性,还方便了后续功能的扩展和优化。如果需要进一步的功能(如事务支持、发布/订阅模式等),也可以在这个基础上进行扩展。