Redis
Hefesto usa Redis internamente para colas de workers, caché y rate limiting. También puedes usar Redis directamente desde tus directivas mediante las directivas RedisSet y RedisGet.
Guardar datos (RedisSet)
RedisSet::run($state, [
'key' => 'user:345',
'expire' => 86400, // 1 día en segundos
'value' => [
'name' => 'Pepito',
'age' => 45
]
]);
Parámetros:
- key: clave de Redis (se combina automáticamente con el nombre de la base de datos de la API).
- value: array a almacenar (se serializa como JSON).
- expire: segundos de expiración (default 600). Tras ese tiempo, el valor desaparece.
- global: si es
true, el valor será accesible desde otras APIs en el mismo virtual-host. Por defecto solo es accesible desde la API que lo guardó.
Leer datos (RedisGet)
RedisGet::run($state, [
'key' => 'user:345',
'target' => 'userInfo'
]);
$userInfo = $state->memory()->get('userInfo');
Parámetros:
- key: clave de Redis.
- target: clave en memory donde se escribirá el resultado.
- global: debe coincidir con el valor usado al guardar. Si se guardó con
global: true, hay que leerlo también conglobal: true.
Si la clave no existe en Redis, la directiva no hace nada y el target en memory queda sin definir.
Uso compartido entre APIs
Por defecto, cada API tiene su propio espacio aislado en Redis. Para compartir datos entre APIs (por ejemplo, una sesión de autenticación), usa el parámetro global a true tanto al guardar como al leer.
Conexión directa a predis
Si necesitas funcionalidades avanzadas de Redis (transacciones, colas, pub/sub, tipos de datos como sets o sorted sets), puedes conectarte directamente usando predis:
$client = new \Predis\Client([
'scheme' => 'tcp',
'host' => config('database.redis.default.host'),
'port' => config('database.redis.default.port'),
'database' => config('database.redis.default.database')
]);
// Ejemplo: lista de espera
$client->lpush('cola:tareas', json_encode(['id' => 123]));
$tarea = $client->rpop('cola:tareas');