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.1.tar.gz
(19.8 kB
view details)
Built Distribution
File details
Details for the file fetch_cache-0.1.1.tar.gz
.
File metadata
- Download URL: fetch_cache-0.1.1.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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 74ccf5e80cb42da96b3177ce48cd37971416e5dac8e944cdd83e33b7660d7594 |
|
MD5 | 4fd289a5e1c457e151ac32f7b3145946 |
|
BLAKE2b-256 | 36df02140719d93fc8f4e204a0243b114a1752565822226086aaf99cf4d2a210 |
File details
Details for the file fetch_cache-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: fetch_cache-0.1.1-py3-none-any.whl
- Upload date:
- Size: 15.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.4 CPython/3.10.15 Windows/10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a637afb662b9ca1234b6027220c7cc83ed8df819d28a86aa25611b41e140f412 |
|
MD5 | 24b45287e85a0d1df2700f8870fcc4ea |
|
BLAKE2b-256 | 46c7338211c24c49c6c98314fb9c500a5d8633b5501f137aa94542ce554b6c08 |