Redis
El componente de Redis de webman utiliza por defecto illuminate/redis, que es la biblioteca de Redis de Laravel, y se utiliza de la misma manera que en Laravel.
Antes de usar illuminate/redis
, debe instalar la extensión Redis para php-cli
.
Nota
Use el comandophp -m | grep redis
para verificar si la extensión Redis está instalada paraphp-cli
. Tenga en cuenta que incluso si tiene instalada la extensión Redis paraphp-fpm
, no significa que pueda usarla paraphp-cli
, ya quephp-cli
yphp-fpm
son aplicaciones diferentes y pueden usar configuraciones diferentes enphp.ini
. Use el comandophp --ini
para verificar qué archivo de configuraciónphp.ini
está utilizando suphp-cli
.
Instalación
composer require -W illuminate/redis illuminate/events
Después de la instalación, es necesario reiniciar (no recargar) el servidor.
Configuración
El archivo de configuración de Redis se encuentra en config/redis.php
.
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
]
];
Ejemplo
<?php
namespace app\controller;
use support\Request;
use support\Redis;
class UserController
{
public function db(Request $request)
{
$key = 'test_key';
Redis::set($key, rand());
return response(Redis::get($key));
}
}
Interfaz de Redis
Redis::append($key, $value)
Redis::bitCount($key)
Redis::decr($key, $value)
Redis::decrBy($key, $value)
Redis::get($key)
Redis::getBit($key, $offset)
Redis::getRange($key, $start, $end)
Redis::getSet($key, $value)
Redis::incr($key, $value)
Redis::incrBy($key, $value)
Redis::incrByFloat($key, $value)
Redis::mGet(array $keys)
Redis::getMultiple(array $keys)
Redis::mSet($pairs)
Redis::mSetNx($pairs)
Redis::set($key, $value, $expireResolution = null, $expireTTL = null, $flag = null)
Redis::setBit($key, $offset, $value)
Redis::setEx($key, $ttl, $value)
Redis::pSetEx($key, $ttl, $value)
Redis::setNx($key, $value)
Redis::setRange($key, $offset, $value)
Redis::strLen($key)
Redis::del(...$keys)
Redis::exists(...$keys)
Redis::expire($key, $ttl)
Redis::expireAt($key, $timestamp)
Redis::select($dbIndex)
Equivalente a
$redis = Redis::connection('default');
$redis->append($key, $value)
$redis->bitCount($key)
$redis->decr($key, $value)
$redis->decrBy($key, $value)
$redis->get($key)
$redis->getBit($key, $offset)
...
Nota
Tenga cuidado al usar el métodoRedis::select($db)
, ya que webman es un marco de trabajo en memoria constante, si una solicitud utilizaRedis::select($db)
para cambiar la base de datos, afectará a las solicitudes posteriores. Para múltiples bases de datos, se recomienda configurar diferentes conexiones Redis para diferentes$db
.
Uso de múltiples conexiones Redis
Por ejemplo, en el archivo de configuración config/redis.php
:
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
],
'cache' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 1,
],
]
Por defecto se utiliza la conexión configurada en default
, puede utilizar el método Redis::connection()
para elegir qué conexión de redis usar:
$redis = Redis::connection('cache');
$redis->get('test_key');
Configuración de clúster
Si su aplicación utiliza un clúster de servidores Redis, debe definir estos clústeres en el archivo de configuración de Redis utilizando la clave clusters:
return [
'clusters' => [
'default' => [
[
'host' => 'localhost',
'password' => null,
'port' => 6379,
'database' => 0,
],
],
],
];
Por defecto, los clústeres pueden implementar el fragmento del cliente en los nodos, lo que le permite implementar piscinas de nodos y crear grandes cantidades de memoria disponibles. Tenga en cuenta que el fragmento compartido del cliente no manejará los fallos; por lo tanto, esta función es principalmente adecuada para el almacenamiento en caché de datos obtenidos de otra base de datos principal. Si desea utilizar el clúster nativo de Redis, debe hacer la siguiente especificación en la clave options del archivo de configuración:
return [
'options' => [
'cluster' => 'redis',
],
'clusters' => [
// ...
],
];
Comandos de pipeline
Cuando necesite enviar múltiples comandos al servidor en una sola operación, se recomienda utilizar comandos de pipeline. El método pipeline acepta un cierre de instancia de Redis. Puede enviar todos los comandos a la instancia de Redis, y todos se ejecutarán en una sola operación:
Redis::pipeline(function ($pipe) {
for ($i = 0; $i < 1000; $i++) {
$pipe->set("key:$i", $i);
}
});