<?php

namespace App\Framework\Cache;

interface Cache
{
    public function get(string $key): CacheItem;
    public function set(string $key, mixed $value, ?int $ttl = null): bool;
    public function has(string $key): bool;
    public function forget(string $key): bool;
    public function clear(): bool;

    /**
     * Führt Callback aus, wenn Wert nicht im Cache ist ("Remember"-Pattern)
     * und cached das Ergebnis für die gewünschte Zeit
     */
    public function remember(string $key, callable $callback, int $ttl = 3600): CacheItem;
}
