Skip to content

Repository files navigation

Use Cache

一个框架无关的Python缓存库,支持多种后端和框架集成。

特性

  • 🚀 框架无关: 可以与任何Python框架集成,不仅限于FastAPI
  • 🔧 多后端支持: 支持Redis、Memcached、DynamoDB和内存缓存
  • 🎯 类型安全: 完整的类型注解支持
  • 🔄 异步优先: 原生异步支持,同时兼容同步函数
  • 🎨 灵活配置: 支持自定义编码器、键构建器和过期策略
  • 📦 向后兼容: 与fastapi-cache完全兼容

安装

# 基础安装
pip install use-cache
# 安装Redis支持
pip install use-cache[redis]
# 安装Memcached支持 
pip install use-cache[memcached]
# 安装DynamoDB支持
pip install use-cache[dynamodb]
# 安装所有后端
pip install use-cache[all]

快速开始

基本使用

importasynciofromuse_cacheimportCacheManager, InMemoryBackend, JsonCoderasyncdefmain():
# 初始化缓存管理器cache_manager=CacheManager()
awaitcache_manager.init(
backend=InMemoryBackend(),
coder=JsonCoder(),
prefix="myapp:",
expire=300# 5分钟
)
# 手动缓存操作awaitcache_manager.set("user:123", {"name": "Alice", "age": 30})
user=awaitcache_manager.get("user:123")
print(user) # {'name': 'Alice', 'age': 30}asyncio.run(main())

装饰器使用

fromuse_cacheimportcache, CacheManager, InMemoryBackend, JsonCoder# 初始化缓存(通常在应用启动时)asyncdefsetup_cache():
cache_manager=CacheManager()
awaitcache_manager.init(
backend=InMemoryBackend(),
coder=JsonCoder()
)
@cache(expire=60)asyncdefget_user_data(user_id: int):
# 模拟数据库查询return {"id": user_id, "name": f"User {user_id}"}
# 使用awaitsetup_cache()
user=awaitget_user_data(123) # 第一次调用,执行函数user=awaitget_user_data(123) # 第二次调用,使用缓存

FastAPI集成

fromfastapiimportFastAPIfromuse_cacheimportCacheManager, InMemoryBackend, JsonCoderfromuse_cache.integrations.fastapiimportcacheapp=FastAPI()
@asynccontextmanagerasyncdeflifespan(app: FastAPI):
# Initialize cache on startupCacheManager.init(
backend=InMemoryBackend(),
coder=JsonCoder,
prefix="fastapi:",
expire=300# 5 minutes
)
yield# Cleanup on shutdown (if needed)@app.get("/users/{user_id}")@cache(expire=60)asyncdefget_user(user_id: int):
return {"id": user_id, "name": f"User {user_id}"}

支持的后端

内存缓存

fromuse_cacheimportInMemoryBackendbackend=InMemoryBackend()

Redis

fromuse_cacheimportRedisBackend# 单个Redis实例backend=RedisBackend("redis://localhost:6379")
# Redis集群backend=RedisBackend([
"redis://node1:6379",
"redis://node2:6379", "redis://node3:6379"
])

Memcached

fromuse_cacheimportMemcachedBackendbackend=MemcachedBackend("127.0.0.1", 11211)

DynamoDB

fromuse_cacheimportDynamoDBBackendbackend=DynamoDBBackend(
table_name="cache_table",
region_name="us-east-1"
)

编码器

JSON编码器(默认)

fromuse_cacheimportJsonCodercoder=JsonCoder()

Pickle编码器

fromuse_cacheimportPickleCodercoder=PickleCoder()

字符串编码器

fromuse_cacheimportStringCodercoder=StringCoder()

键构建器

默认键构建器

fromuse_cacheimportdefault_key_builder# 自动根据函数名和参数生成键

简单键构建器

fromuse_cacheimportsimple_key_builder# 仅使用函数名作为键

自定义键构建器

defcustom_key_builder(func, *args, **kwargs):
returnf"custom:{func.__name__}:{hash(str(args) +str(kwargs))}"

便捷装饰器

fromuse_cacheimportcache_one_minute, cache_one_hour, cache_one_day@cache_one_minuteasyncdefquick_data():
return"cached for 1 minute"@cache_one_hourasyncdefhourly_data():
return"cached for 1 hour"@cache_one_dayasyncdefdaily_data():
return"cached for 1 day"

开发

安装开发依赖

uv sync --extra test# 如需安装后端支持,可选择性同步对应 extras:# Redis: uv sync --extra redis# Memcached: uv sync --extra memcached# DynamoDB: uv sync --extra dynamodb# 全部后端: uv sync --extra all

运行测试

uv run pytest

运行示例

# 基本示例
uv run python examples/basic_usage.py
# FastAPI示例
uv run python examples/fastapi_example.py

许可证

MIT License

About

Caching library with multiple backend support

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages