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
)

扩展

from fetch_cache import HTTPClient
from datetime import datetime
import time



class FC(HTTPClient):
    def field_list(self, params: dict = None):
        """获取字段列表"""
        response = self.get("field_list", params=params, no_cache=True)
        return {str(i["id"]): i["name"] for i in response["data"]}


http_big_client = FC(
    base_url=f"http://11111.11.11/kong/user/",
    headers={"Authorization": "bearer xxxx"},
    cache_type="file",
    cache_config={"cache_dir": "./cache"},
    cache_ttl=10,
)


if __name__ == "__main__":
    resp = http_big_client.field_list()
    print(resp)
    resp = http_big_client.field_list()
    print(resp)

各数据库的 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.3.tar.gz (20.3 kB view details)

Uploaded Source

Built Distribution

fetch_cache-0.1.3-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fetch_cache-0.1.3.tar.gz
  • Upload date:
  • Size: 20.3 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.3.tar.gz
Algorithm Hash digest
SHA256 e95ce0b5c1af7d5f8a0dfa2b7660ca6a9886de1db2cdd7fcedcad457708b4758
MD5 90096f52fface36143a480e2cf98b7f8
BLAKE2b-256 b5252b5f84149e1ea3c2388b6887b64cb574b9d38074a891d242c7ec49e39337

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fetch_cache-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 16.2 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 e3ada7f457e312143174d83b8fe934e3d35162ee118b6b5b1f690c9f095aea7f
MD5 e5f41b908ab85c8639fc4889b4481623
BLAKE2b-256 2c40b8705073149ee34b5438f5af5936be8c9069e43848172a3db585c92dad8b

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