Skip to main content

Caching library with multiple backend support

Project description

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]

快速开始

基本使用

import asyncio
from use_cache import CacheManager, InMemoryBackend, JsonCoder

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

asyncio.run(main())

装饰器使用

from use_cache import cache, CacheManager, InMemoryBackend, JsonCoder

# 初始化缓存(通常在应用启动时)
async def setup_cache():
    cache_manager = CacheManager()
    await cache_manager.init(
        backend=InMemoryBackend(),
        coder=JsonCoder()
    )

@cache(expire=60)
async def get_user_data(user_id: int):
    # 模拟数据库查询
    return {"id": user_id, "name": f"User {user_id}"}

# 使用
await setup_cache()
user = await get_user_data(123)  # 第一次调用,执行函数
user = await get_user_data(123)  # 第二次调用,使用缓存

FastAPI集成

from fastapi import FastAPI
from use_cache import CacheManager, InMemoryBackend, JsonCoder
from use_cache.integrations.fastapi import cache

app = FastAPI()

@asynccontextmanager
async def lifespan(app: FastAPI):
    # Initialize cache on startup
    CacheManager.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)
async def get_user(user_id: int):
    return {"id": user_id, "name": f"User {user_id}"}

支持的后端

内存缓存

from use_cache import InMemoryBackend

backend = InMemoryBackend()

Redis

from use_cache import RedisBackend

# 单个Redis实例
backend = RedisBackend("redis://localhost:6379")

# Redis集群
backend = RedisBackend([
    "redis://node1:6379",
    "redis://node2:6379", 
    "redis://node3:6379"
])

Memcached

from use_cache import MemcachedBackend

backend = MemcachedBackend("127.0.0.1", 11211)

DynamoDB

from use_cache import DynamoDBBackend

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

编码器

JSON编码器(默认)

from use_cache import JsonCoder

coder = JsonCoder()

Pickle编码器

from use_cache import PickleCoder

coder = PickleCoder()

字符串编码器

from use_cache import StringCoder

coder = StringCoder()

键构建器

默认键构建器

from use_cache import default_key_builder

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

简单键构建器

from use_cache import simple_key_builder

# 仅使用函数名作为键

自定义键构建器

def custom_key_builder(func, *args, **kwargs):
    return f"custom:{func.__name__}:{hash(str(args) + str(kwargs))}"

便捷装饰器

from use_cache import cache_one_minute, cache_one_hour, cache_one_day

@cache_one_minute
async def quick_data():
    return "cached for 1 minute"

@cache_one_hour  
async def hourly_data():
    return "cached for 1 hour"

@cache_one_day
async def daily_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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

use_cache-0.1.0.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

use_cache-0.1.0-py3-none-any.whl (18.0 kB view details)

Uploaded Python 3

File details

Details for the file use_cache-0.1.0.tar.gz.

File metadata

  • Download URL: use_cache-0.1.0.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for use_cache-0.1.0.tar.gz
Algorithm Hash digest
SHA256 2f20e4ef887a798ef6e94863ef096714d484894d4a86d2b1616898ebd0f7e5fd
MD5 73e947af8dc4969db4858ca0a847b4a7
BLAKE2b-256 a16a21dab8c24f75263fc82b45ea9d6be919eb233a00bbc1d937f631d9d3c5b9

See more details on using hashes here.

File details

Details for the file use_cache-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: use_cache-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 18.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for use_cache-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cbb981f69955fcfeec03452c29f4862bea9cf9805b59d54fe84810e9e5440cae
MD5 e9c22c5adb66ae1fc52cdcc9f8001a68
BLAKE2b-256 95dcf18a389afa30c8ef0fff7842f7d12dc3a65c4db244499677e5b6b8bbf666

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page