Caching stores results of expensive operations for reuse. Use APCu for single-server memory caching or Redis for shared caching across servers. Good caching can dramatically reduce database load and response times.
Caching
// APCu — in-memory cache (single server)
apcu_store("user_42", $userData, 3600); // cache for 1 hour
$data = apcu_fetch("user_42");
apcu_delete("user_42");
apcu_clear_cache();
// File-based cache
function getFromCache(string $key, callable $fn, int $ttl = 3600): mixed {
$file = sys_get_temp_dir() . "/cache_" . md5($key) . ".cache";
if (file_exists($file) && (time() - filemtime($file)) < $ttl) {
return unserialize(file_get_contents($file));
}
$data = $fn();
file_put_contents($file, serialize($data));
return $data;
}
$users = getFromCache("all_users", fn() => $pdo->query("SELECT * FROM users")->fetchAll());
// Redis with predis
// composer require predis/predis
$redis = new Predis\Client();
$redis->setex("key", 3600, json_encode($data));
$cached = json_decode($redis->get("key"), true);