Skip to content

Caching

boostylib includes a built-in caching layer to reduce API calls for data that changes infrequently.

Default Behavior

Cache is enabled by default using MemoryCache (in-process, with TTL):

from boostylib import BoostyClient

client = BoostyClient(access_token="...")
# Cache is active — repeated calls to get_blog(), get_levels() etc. are fast

Disable Cache

from boostylib import BoostyClient, BoostySettings

client = BoostyClient(
    access_token="...",
    settings=BoostySettings(cache_enabled=False),
)

TTL Configuration

Setting Default Description
cache_ttl_blog 300s (5 min) Blog info
cache_ttl_levels 600s (10 min) Subscription levels
cache_ttl_user 120s (2 min) User profile
cache_ttl_default 60s (1 min) Everything else
settings = BoostySettings(
    cache_ttl_blog=600,      # 10 minutes
    cache_ttl_levels=1800,   # 30 minutes
    cache_ttl_default=30,    # 30 seconds
)

Manual Cache Operations

# Clear everything
await client.cache.clear()

# Delete a specific key
await client.cache.delete("blog:my_blog:info")

# Invalidate all keys with a prefix
await client.cache.invalidate_pattern("blog:my_blog:")

# Direct JSON get/set
await client.cache.set_json("my_key", {"data": 42}, ttl=120)
value = await client.cache.get_json("my_key")

Custom Cache Backend

Implement the CacheBackend protocol:

from boostylib.cache import CacheBackend

class RedisCache:
    def __init__(self, redis_url: str):
        self.redis = ...  # your Redis client

    async def get(self, key: str) -> bytes | None:
        return await self.redis.get(f"boosty:{key}")

    async def set(self, key: str, value: bytes, *, ttl: int | None = None) -> None:
        await self.redis.set(f"boosty:{key}", value, ex=ttl)

    async def delete(self, key: str) -> None:
        await self.redis.delete(f"boosty:{key}")

    async def clear(self) -> None:
        keys = await self.redis.keys("boosty:*")
        if keys:
            await self.redis.delete(*keys)

# Use it
client = BoostyClient(access_token="...", cache=RedisCache("redis://localhost"))

Built-in Backends

Backend Description
MemoryCache In-memory dict with TTL (default when enabled)
NullCache No-op — nothing is cached (default when disabled)