Cache Configuration API
Pydantic models defining configuration for cache backends and the cache manager.
Manager Configuration
CacheManagerConfig
CacheManagerConfig
Bases: BaseModel
Global cache manager configuration.
Source code in src/jinpy_utils/cache/config.py
| class CacheManagerConfig(BaseModel):
"""Global cache manager configuration."""
backends: list[MemoryCacheConfig | RedisCacheConfig | FileCacheConfig] = Field(
default_factory=list
)
enable_singleton: bool = Field(default=True)
async_queue_size: int = Field(default=10_000, gt=0)
default_backend: str | None = Field(
default=None, description="Default backend name to use"
)
model_config = ConfigDict(use_enum_values=True, extra="ignore")
@field_validator("backends")
@classmethod
def validate_backends(cls, v: list[Any]) -> list[Any]:
names = [b.name for b in v if hasattr(b, "name")]
if len(names) != len(set(names)):
raise ValueError("Backend names must be unique")
return v
|
Backend Configurations
BaseCacheBackendConfig
BaseCacheBackendConfig
Bases: BaseModel
Base configuration for all cache backends.
Source code in src/jinpy_utils/cache/config.py
| class BaseCacheBackendConfig(BaseModel):
"""Base configuration for all cache backends."""
backend_type: CacheBackendType
name: str = Field(..., description="Unique backend name")
enabled: bool = True
default_ttl: float | None = Field(
default=None, ge=0, description="Default TTL in seconds"
)
serializer: Literal["json", "pickle", "str", "bytes"] = "json"
model_config = ConfigDict(extra="allow", use_enum_values=True)
|
MemoryCacheConfig
MemoryCacheConfig
Bases: BaseCacheBackendConfig
Configuration for in-memory cache.
Source code in src/jinpy_utils/cache/config.py
| class MemoryCacheConfig(BaseCacheBackendConfig):
"""Configuration for in-memory cache."""
backend_type: CacheBackendType = CacheBackendType.MEMORY
max_entries: int | None = Field(
default=None,
ge=1,
description="Optional max entries for eviction (FIFO)",
)
thread_safe: bool = True
|
RedisCacheConfig
RedisCacheConfig
Bases: BaseCacheBackendConfig
Configuration for Redis cache (async).
Source code in src/jinpy_utils/cache/config.py
| class RedisCacheConfig(BaseCacheBackendConfig):
"""Configuration for Redis cache (async)."""
backend_type: CacheBackendType = CacheBackendType.REDIS
url: str = Field(
...,
description="Redis URL, e.g., redis://localhost:6379/0",
)
decode_responses: bool = False
pool_size: int = Field(default=10, ge=1, le=100)
connect_timeout: float = Field(default=5.0, gt=0)
command_timeout: float = Field(default=2.0, gt=0)
ssl: bool = False
@field_validator("url")
@classmethod
def validate_url(cls, v: str) -> str:
if not v.startswith(("redis://", "rediss://")):
raise ValueError("Redis URL must start with redis:// or rediss://")
return v
|
FileCacheConfig
FileCacheConfig
Bases: BaseCacheBackendConfig
Configuration for file-based cache.
Source code in src/jinpy_utils/cache/config.py
| class FileCacheConfig(BaseCacheBackendConfig):
"""Configuration for file-based cache."""
backend_type: CacheBackendType = CacheBackendType.FILE
directory: Path = Field(
default=Path(".cache"),
description="Directory for stored cache entries",
)
file_extension: str = Field(default=".bin")
max_entries: int | None = Field(default=None, ge=1)
@field_validator("directory")
@classmethod
def ensure_dir(cls, v: Path) -> Path:
v.mkdir(parents=True, exist_ok=True)
return v
|
Examples
Minimal in-memory config
from jinpy_utils.cache import CacheManager, CacheManagerConfig, MemoryCacheConfig
cfg = CacheManagerConfig(
default_backend="mem",
backends=[MemoryCacheConfig(name="mem", default_ttl=30)]
)
CacheManager(cfg)
File backend config
from pathlib import Path
from jinpy_utils.cache import CacheManager, CacheManagerConfig, FileCacheConfig
cfg = CacheManagerConfig(
default_backend="disk",
backends=[FileCacheConfig(name="disk", directory=Path(".cache"), file_extension=".bin")]
)
CacheManager(cfg)
Redis backend config
from jinpy_utils.cache import CacheManager, CacheManagerConfig, RedisCacheConfig
cfg = CacheManagerConfig(
default_backend="redis",
backends=[RedisCacheConfig(name="redis", url="redis://localhost:6379/0", decode_responses=False)]
)
CacheManager(cfg)