Skip to main content

An HTTP client with multiple cache backends to optimize repeated request performance

Project description

fetch-cache

🚧 警告:这是一个"能用就行"的项目!

💡 如果发现 bug,那一定是特性!

🔧 代码写得不够优雅?随时欢迎 PR!

🎯 目标是:能用 > 好用 > 很好用

一个支持多种缓存后端的 HTTP 客户端库,基于 httpx 开发,提供同步和异步支持,本项目是自用代码整理后的开源版本,功能可能不够完善,但核心功能已经可以正常使用。 欢迎根据实际需求修改代码,如果对你有帮助,请点个星!。

特性

  • 基于 httpx 的现代 HTTP 客户端
  • 支持同步和异步请求
  • 内置多种缓存后端:
    • 内存缓存 (默认)
    • 文件缓存
    • Redis 缓存
    • SQL 缓存 (支持 MySQL、PostgreSQL、SQLite、MariaDB)
    • MongoDB 缓存 (实验性)
    • Django 缓存 (实验性)
  • 灵活的缓存配置

安装

pip install fetch_cache

基础使用

同步客户端

from fetch_cache import HTTPClient

# 创建客户端实例
client = HTTPClient(
    base_url="https://api.example.com",
    headers={"Authorization": "Bearer token"},
    cache_type="memory",  # 默认使用内存缓存
    cache_ttl=3600,  # 缓存有效期(秒)
)

# 发送请求
response = client.request(
    method="GET",
    endpoint="/users",
    params={"page": 1}
)

# 不使用缓存
response = client.request(
    method="GET",
    endpoint="/users",
    no_cache=True
)

# 关闭客户端
client.close()

异步客户端

import asyncio
from fetch_cache import AsyncHTTPClient

async def main():
    # 创建异步客户端实例
    client = AsyncHTTPClient(
        base_url="https://api.example.com",
        headers={"Authorization": "Bearer token"},
        cache_type="redis",
        cache_config={
            "host": "localhost",
            "port": 6379,
            "db": 0
        },
        cache_ttl=3600
    )

    # 发送异步请求
    response = await client.request(
        method="GET",
        endpoint="/users",
        params={"page": 1}
    )

    # 关闭客户端
    await client.close()

asyncio.run(main())

缓存配置

内存缓存 (默认)

最简单的缓存实现,数据存储在内存中,程序重启后缓存会丢失。

文件缓存

将缓存数据以 JSON 格式存储在本地文件系统中。

Redis 缓存

使用 Redis 作为缓存后端,需要先安装 redis 包:

pip install redis

配置示例:

client = HTTPClient(
    base_url="https://api.example.com",
    cache_type="redis",
    cache_config={
        "host": "localhost",
        "port": 6379,
        "db": 0,
        "password": None,
        "socket_timeout": 5,
        "connection_pool": {
            "max_connections": 10
        }
    },
    cache_ttl=3600
)

SQL 缓存

支持 MySQL、PostgreSQL、SQLite 和 MariaDB,需要先安装对应的数据库驱动:

# MySQL
pip install pymysql

# PostgreSQL 
pip install psycopg2-binary

# MariaDB
pip install mariadb

# SQLite (Python 内置)

配置示例:

client = HTTPClient(
    base_url="https://api.example.com",
    cache_type="mysql",  # 或 postgresql、sqlite、mariadb
    cache_config={
        "engine_url": "mysql+pymysql://user:pass@localhost/dbname",
        "table_name": "http_cache",  # 可选,默认为 http_cache
        "pool_size": 5,
        "max_overflow": 10,
        "pool_timeout": 30,
        "pool_recycle": 1800
    },
    cache_ttl=3600
)

各数据库的 engine_url 格式:

  • MySQL: mysql+pymysql://user:pass@localhost/dbname
  • PostgreSQL: postgresql+psycopg2://user:pass@localhost/dbname
  • SQLite: sqlite:///path/to/cache.db
  • MariaDB: mariadb+mariadb://user:pass@localhost/dbname

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

fetch_cache-0.1.0.tar.gz (19.8 kB view details)

Uploaded Source

Built Distribution

fetch_cache-0.1.0-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fetch_cache-0.1.0.tar.gz
  • Upload date:
  • Size: 19.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.10.15 Windows/10

File hashes

Hashes for fetch_cache-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f289c3961ecdf9c10735d8bc4bb2262a91216b77f41225fc77e24d10f80dff11
MD5 562178d3be30a6a8742f0ff326c4a45b
BLAKE2b-256 f83ac37c63ded8b61cd8c96ababa60e608ad6d1345878894bc29e295c6c72fd1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fetch_cache-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.10.15 Windows/10

File hashes

Hashes for fetch_cache-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d52f2b8dd7fab1d8a7e0f99a993194095cee2637a0da977a03f886cd230f93a5
MD5 32dda1baceae7531f9c5472964f488de
BLAKE2b-256 5c4569c00dd0bcf52bb9dec9443bf23fbfaaaceb5838dd410c8060b03777e6b1

See more details on using hashes here.

Supported by

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