workerman-redis
Introducción
workeman/redis es un componente asíncrono de redis basado en workerman.
Nota
El propósito principal de este proyecto es implementar la suscripción asíncrona de redis (subscribe, pSubscribe). Debido a que redis es bastante rápido, a menos que se necesite la suscripción asíncrona psubscribe subscribe, no es necesario utilizar este cliente asíncrono. El uso de la extensión de redis proporcionará un mejor rendimiento.
Instalación:
composer require workerman/redis
Uso de devolución de llamada
use Workerman\Worker;
use Workerman\Redis\Client;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:6161');
$worker->onWorkerStart = function() {
global $redis;
$redis = new Client('redis://127.0.0.1:6379');
};
$worker->onMessage = function(TcpConnection $connection, $data) {
global $redis;
$redis->set('key', 'hello world');
$redis->get('key', function ($result) use ($connection) {
$connection->send($result);
});
};
Worker::runAll();
Uso de la corriente
Nota
El uso de la corriente requiere workerman>=5.0, workerman/redis>=2.0.0 y la instalación de composer require revolt/event-loop ^1.0.0
use Workerman\Worker;
use Workerman\Redis\Client;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:6161');
$worker->onWorkerStart = function() {
global $redis;
$redis = new Client('redis://127.0.0.1:6379');
};
$worker->onMessage = function(TcpConnection $connection, $data) {
global $redis;
$redis->set('key', 'hello world');
$result = $redis->get('key');
$connection->send($result);
};
Worker::runAll();
Cuando no se establecen las funciones de devolución de llamada, el cliente utilizará un enfoque sincrónico para devolver los resultados de las solicitudes asíncronas. El proceso de solicitud no bloqueará el subproceso actual, lo que permite el manejo concurrente de las solicitudes.
Nota
El uso de la corriente no es compatible con psubscribe subscribe.
Documentación
Aclaración
En el modo de devolución de llamada, la función de devolución de llamada usualmente tiene 2 parámetros ($result, $redis), donde $result
es el resultado y $redis
es la instancia de redis. Por ejemplo:
use Workerman\Redis\Client;
$redis = new Client('redis://127.0.0.1:6379');
// Establecer la función de devolución de llamada para evaluar el resultado de la llamada set
$redis->set('key', 'value', function ($result, $redis) {
var_dump($result); // true
});
// Las funciones de devolución de llamada son parámetros opcionales, por lo que aquí se omite la función de devolución de llamada
$redis->set('key1', 'value1');
// Las funciones de devolución de llamada pueden ser anidadas
$redis->get('key', function ($result, $redis){
$redis->set('key2', 'value2', function ($result) {
var_dump($result);
});
});
Conexión
use Workerman\Redis\Client;
// Omitir la devolución de llamada
$redis = new Client('redis://127.0.0.1:6379');
// Con devolución de llamada
$redis = new Client('redis://127.0.0.1:6379', [
'connect_timeout' => 10 // Establecer un tiempo de espera de conexión de 10 segundos, el valor predeterminado es 5 segundos
], function ($success, $redis) {
// Devolución de llamada del resultado de la conexión
if (!$success) echo $redis->error();
});
auth
// Autenticación de contraseña
$redis->auth('password', function ($result) {
});
// Autenticación de nombre de usuario y contraseña
$redis->auth('username', 'password', function ($result) {
});
pSubscribe
Suscribe uno o más canales que coincidan con los patrones dados.
Cada patrón utiliza el carácter como comodín, por ejemplo, it* coincidirá con todos los canales que comiencen con it (it.news, it.blog, it.tweets, etc.). news.\ coincidirá con todos los canales que comiencen con news. (news.it, news.global.today, etc.), y así sucesivamente.
Nota: la función de devolución de llamada de pSubscribe tiene 4 parámetros ($pattern, $channel, $message, $redis).
Una vez que una instancia de $redis llama a los métodos pSubscribe o subscribe, llamar a otros métodos en la misma instancia será ignorado.
$redis = new Client('redis://127.0.0.1:6379');
$redis2 = new Client('redis://127.0.0.1:6379');
$redis->psubscribe(['news*', 'blog*'], function ($pattern, $channel, $message) {
echo "$pattern, $channel, $message"; // news*, news.add, news content
});
Timer::add(5, function () use ($redis2){
$redis2->publish('news.add', 'news content');
});
subscribe
Se utiliza para suscribirse a uno o varios canales específicos.
Nota: la función de devolución de llamada de subscribe tiene 3 parámetros ($channel, $message, $redis).
Una vez que una instancia de $redis llama a los métodos pSubscribe o subscribe, llamar a otros métodos en la misma instancia será ignorado.
$redis = new Client('redis://127.0.0.1:6379');
$redis2 = new Client('redis://127.0.0.1:6379');
$redis->subscribe(['news', 'blog'], function ($channel, $message) {
echo "$channel, $message"; // news, news content
});
Timer::add(5, function () use ($redis2){
$redis2->publish('news', 'news content');
});
publish
Se utiliza para enviar información a un canal específico.
Devuelve la cantidad de suscriptores que recibieron la información.
$redis2->publish('news', 'news content');
select
// Omitir la devolución de llamada
$redis->select(2);
$redis->select('test', function ($result, $redis) {
// El argumento select debe ser numérico, por lo que $result aquí es false
var_dump($result, $redis->error());
});
get
El comando se utiliza para obtener el valor de una clave específica. Si la clave no existe, devuelve NULL. Si el valor almacenado en la clave no es de tipo cadena, devuelve false.
$redis->get('key', function($result) {
// Si la clave no existe, devuelve NULL; si hay un error, devuelve false
var_dump($result);
});
set
Se utiliza para establecer el valor de una clave específica. Si la clave ya tiene un valor almacenado, SET sobrescribirá el valor antiguo, independientemente de su tipo.
$redis->set('key', 'value');
$redis->set('key', 'value', function($result){});
// El tercer parámetro puede ser el tiempo de expiración, expirará después de 10 segundos
$redis->set('key','value', 10);
$redis->set('key','value', 10, function($result){});
setEx, pSetEx
Establece el valor y el tiempo de expiración para una clave específica. Si la clave ya existe, el comando SETEX reemplazará el valor antiguo.
// Nota que el segundo parámetro es el tiempo de expiración en segundos
$redis->setEx('key', 3600, 'value');
// pSetEx con el tiempo de expiración en milisegundos
$redis->pSetEx('key', 3600, 'value');
del
Se utiliza para eliminar claves existentes. Devuelve el número de claves eliminadas (las claves no existentes no se cuentan).
// Eliminar una clave
$redis->del('key');
// Eliminar varias claves
$redis->del(['key', 'key1', 'key2']);
setNx
(SET if Not eXists) Se utiliza para establecer un valor para una clave solo si esta no existe.
$redis->del('key');
$redis->setNx('key', 'value', function($result){
var_dump($result); // 1
});
$redis->setNx('key', 'value', function($result){
var_dump($result); // 0
});
exists
Se utiliza para verificar si una clave específica existe. Devuelve el número de claves que existen.
$redis->set('key', 'value');
$redis->exists('key', function ($result) {
var_dump($result); // 1
});
$redis->exists('NonExistingKey', function ($result) {
var_dump($result); // 0
});
$redis->mset(['foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz']);
$redis->exists(['foo', 'bar', 'baz'], function ($result) {
var_dump($result); // 3
});
incr, incrBy
Incrementa el valor de una clave en uno o en un valor específico. Si la clave no existe, se inicializará con 0 antes de realizar la operación incr/incrBy. Si el valor contiene un tipo incorrecto o el valor de tipo cadena no se puede representar como un número, devolverá false. Si tiene éxito, devolverá el valor incrementado.
$redis->incr('key1', function ($result) {
var_dump($result);
});
$redis->incrBy('key1', 10, function ($result) {
var_dump($result);
});
incrByFloat
Agrega un valor flotante específico al valor almacenado de una clave. Si la clave no existe, INCRBYFLOAT inicializará la clave con 0 antes de realizar la operación de suma. Si el valor contiene un tipo incorrecto o el valor de tipo cadena no se puede representar como un número, devolverá false. Si tiene éxito, devolverá el valor sumado.
$redis->incrByFloat('key1', 1.5, function ($result) {
var_dump($result);
});
decr, decrBy
Disminuye el valor de una clave en uno o en un valor específico. Si la clave no existe, se inicializará con 0 antes de realizar la operación decr/decrBy. Si el valor contiene un tipo incorrecto o el valor de tipo cadena no se puede representar como un número, devolverá false. Si tiene éxito, devolverá el valor disminuido.
$redis->decr('key1', function ($result) {
var_dump($result);
});
$redis->decrBy('key1', 10, function ($result) {
var_dump($result);
});
mGet
Devuelve los valores de una o más claves especificadas. Si alguna de las claves no existe, devuelve NULL.
$redis->set('key1', 'value1');
$redis->set('key2', 'value2');
$redis->set('key3', 'value3');
$redis->mGet(['key0', 'key1', 'key5'], function ($result) {
var_dump($result); // [null, 'value1', null];
});
getSet
Se utiliza para establecer el valor de una clave específica y devolver el valor antiguo de la clave.
$redis->set('x', '42');
$redis->getSet('x', 'lol', function ($result) {
var_dump($result); // '42'
}) ;
$redis->get('x', function ($result) {
var_dump($result); // 'lol'
}) ;
randomKey
Devuelve una clave aleatoria de la base de datos actual.
$redis->randomKey(function($key) use ($redis) {
$redis->get($key, function ($result) {
var_dump($result);
}) ;
})
move
Mueve la clave de la base de datos actual a la base de datos dada.
$redis->select(0); // cambia a la base de datos 0
$redis->set('x', '42'); // escribe 42 en x
$redis->move('x', 1, function ($result) { // mueve a la base de datos 1
var_dump($result); // 1
}) ;
$redis->select(1); // cambia a la base de datos 1
$redis->get('x', function ($result) {
var_dump($result); // '42'
}) ;
rename
Cambia el nombre de una clave. Retorna falso si la clave no existe.
$redis->set('x', '42');
$redis->rename('x', 'y', function ($result) {
var_dump($result); // true
}) ;
renameNx
Cambia el nombre de una clave si la nueva clave no existe.
$redis->del('y');
$redis->set('x', '42');
$redis->renameNx('x', 'y', function ($result) {
var_dump($result); // 1
}) ;
expire
Establece el tiempo de expiración de una clave en segundos. Devuelve 1 en caso de éxito, 0 si la clave no existe y falso en caso de error.
$redis->set('x', '42');
$redis->expire('x', 3);
keys
Busca todas las claves que coinciden con el patrón dado.
$redis->keys('*', function ($keys) {
var_dump($keys);
}) ;
$redis->keys('user*', function ($keys) {
var_dump($keys);
}) ;
type
Devuelve el tipo de valor almacenado en una clave. Puede ser string, set, list, zset, hash o none si la clave no existe.
$redis->type('key', function ($result) {
var_dump($result); // string set list zset hash none
}) ;
append
Si la clave existe y es una cadena, APPEND agrega el valor al final de la clave y devuelve la longitud de la cadena resultante.
Si la clave no existe, simplemente establece la clave con el valor dado y devuelve la longitud de la cadena.
Si la clave existe pero no es una cadena, devuelve falso.
$redis->set('key', 'value1');
$redis->append('key', 'value2', function ($result) {
var_dump($result); // 12
}) ;
$redis->get('key', function ($result) {
var_dump($result); // 'value1value2'
}) ;
getRange
Obtiene una subcadena de la cadena almacenada en la clave dada. Devuelve una cadena vacía si la clave no existe y falso si la clave no es de tipo cadena.
$redis->set('key', 'string value');
$redis->getRange('key', 0, 5, function ($result) {
var_dump($result); // 'string'
}) ;
$redis->getRange('key', -5, -1 , function ($result) {
var_dump($result); // 'value'
}) ;
setRange
Reemplaza parte de la cadena almacenada en una clave con una nueva cadena a partir de un desplazamiento dado. Si la clave no existe, la crea y establece la cadena. Devuelve la longitud de la cadena modificada.
$redis->set('key', 'Hello world');
$redis->setRange('key', 6, "redis", function ($result) {
var_dump($result); // 11
}) ;
$redis->get('key', function ($result) {
var_dump($result); // 'Hello redis'
}) ;
strLen
Obtiene la longitud de la cadena almacenada en la clave dada. Devuelve falso si la clave no almacena una cadena.
$redis->set('key', 'value');
$redis->strlen('key', function ($result) {
var_dump($result); // 5
}) ;
getBit
Obtiene el bit en el desplazamiento dado de la cadena almacenada en la clave.
$redis->set('key', "\x7f"); // esto es 0111 1111
$redis->getBit('key', 0, function ($result) {
var_dump($result); // 0
}) ;
setBit
Establece o borra el bit en el desplazamiento dado de la cadena almacenada en la clave. Devuelve 0 o 1, que es el valor antes de la modificación.
$redis->set('key', "*"); // ord("*") = 42 = 0x2f = "0010 1010"
$redis->setBit('key', 5, 1, function ($result) {
var_dump($result); // 0
}) ;
bitOp
Realiza una operación a nivel de bits en múltiples claves (almacenando cadenas) y almacena el resultado en la clave de destino.
BITOP admite cuatro operaciones a nivel de bits: AND, OR, XOR y NOT.
Devuelve la longitud de la cadena almacenada en la clave de destino, que es igual a la longitud de la cadena más larga de entrada.
$redis->set('key1', "abc");
$redis->bitOp( 'AND', 'dst', 'key1', 'key2', function ($result) {
var_dump($result); // 3
}) ;
bitCount
Cuenta el número de bits establecidos en una cadena (conteo de población).
Por defecto, verifica todos los bytes en la cadena. Se pueden especificar intervalos de conteo utilizando los parámetros adicionales start y end.
Similar al comando GETRANGE, los valores de inicio y fin pueden ser negativos para indexar bytes desde el final de la cadena, donde -1 es el último byte, -2 es el penúltimo byte, y así sucesivamente.
Devuelve el número de bits establecidos en la cadena. Para claves inexistentes, se considera como una cadena vacía y el comando devuelve 0.
$redis->set('key', 'hello');
$redis->bitCount( 'key', 0, 0, function ($result) {
var_dump($result); // 3
}) ;
$redis->bitCount( 'key', function ($result) {
var_dump($result); //21
}) ;
sort
El comando sort ordena los elementos de una lista, conjunto o conjunto ordenado.
Formato: sort($key, $options, $callback);
Donde las opciones son pares clave-valor opcionales:
$options = [
'by' => 'some_pattern_*',
'limit' => [0, 1],
'get' => 'some_other_pattern_*', // o un array de patrones
'sort' => 'asc', // o 'desc'
'alpha' => true,
'store' => 'external-key'
];
$redis->del('s');
$redis->sAdd('s', 5);
$redis->sAdd('s', 4);
$redis->sAdd('s', 2);
$redis->sAdd('s', 1);
$redis->sAdd('s', 3);
$redis->sort('s', [], function ($result) {
var_dump($result); // 1,2,3,4,5
});
$redis->sort('s', ['sort' => 'desc'], function ($result) {
var_dump($result); // 5,4,3,2,1
});
$redis->sort('s', ['sort' => 'desc', 'store' => 'out'], function ($result) {
var_dump($result); // (int)5
});
ttl, pttl
Devuelve el tiempo restante para que una clave expire en segundos/milisegundos.
Si la clave no tiene TTL, devuelve -1. Si la clave no existe, devuelve -2.
$redis->set('key', 'value', 10);
// en segundos
$redis->ttl('key', function ($result) {
var_dump($result); // 10
});
// en milisegundos
$redis->pttl('key', function ($result) {
var_dump($result); // 9999
});
// clave no existe
$redis->pttl('key-not-exists', function ($result) {
var_dump($result); // -2
});
persist
Elimina el tiempo de expiración de una clave, evitando que expire.
Devuelve 1 si tiene éxito, 0 si la clave no existe o no tiene tiempo de expiración, y falso si ocurre un error.
$redis->persist('key');
mSet, mSetNx
Establece múltiples pares clave-valor en un solo comando atómico. mSetNx solo devuelve 1 si se establecen todas las claves.
Devuelve 1 en caso de éxito, 0 en caso de fallo, y falso si ocurre un error.
$redis->mSet(['key0' => 'value0', 'key1' => 'value1']);
hSet
Establece el valor de un campo en el hash.
Si el campo es nuevo y el valor se establece con éxito, devuelve 1. Si el campo ya existe en el hash y su valor antiguo es reemplazado por el nuevo, devuelve 0.
$redis->del('h');
$redis->hSet('h', 'key1', 'hello', function ($r) {
var_dump($r); // 1
});
$redis->hGet('h', 'key1', function ($r) {
var_dump($r); // hello
});
$redis->hSet('h', 'key1', 'plop', function ($r) {
var_dump($r); // 0
});
$redis->hGet('h', 'key1', function ($r) {
var_dump($r); // plop
});
hSetNx
Establece el valor de un campo en el hash si el campo no existe.
Si el hash no existe, se crea un nuevo hash y se realiza la operación hSetNx.
Si el campo ya existe en el hash, la operación es inválida.
$redis->del('h');
$redis->hSetNx('h', 'key1', 'hello', function ($r) {
var_dump($r); // 1
});
$redis->hSetNx('h', 'key1', 'world', function ($r) {
var_dump($r); // 0
});
hGet
Devuelve el valor de un campo en el hash.
Si el campo o el hash no existen, devuelve null.
$redis->hGet('h', 'key1', function ($result) {
var_dump($result);
});
hLen
Se usa para obtener el número de campos en una tabla hash.
Devuelve 0 cuando la clave no existe.
$redis->del('h');
$redis->hSet('h', 'key1', 'hello');
$redis->hSet('h', 'key2', 'plop');
$redis->hLen('h', function ($result) {
var_dump($result); // 2
});
hDel
Se utiliza para eliminar uno o más campos específicos de la tabla hash en la clave dada. Los campos que no existen serán ignorados.
Devuelve la cantidad de campos eliminados exitosamente, excluyendo los campos ignorados. Devuelve false si la clave no es una tabla hash.
$redis->hDel('h', 'key1');
hKeys
Obtiene todos los campos de la tabla hash como un array.
Si la clave no existe, devuelve un array vacío. Si la clave no corresponde a una tabla hash, devuelve false.
$redis->hKeys('key', function ($result) {
var_dump($result);
});
hVals
Devuelve todos los valores de los campos de la tabla hash como un array.
Si la clave no existe, devuelve un array vacío. Si la clave no corresponde a una tabla hash, devuelve false.
$redis->hVals('key', function ($result) {
var_dump($result);
});
hGetAll
Devuelve todos los campos y valores de la tabla hash en forma de un array asociativo.
Si la clave no existe, devuelve un array vacío. Si la clave no corresponde a una tabla hash, devuelve false.
$redis->del('h');
$redis->hSet('h', 'a', 'x');
$redis->hSet('h', 'b', 'y');
$redis->hSet('h', 'c', 'z');
$redis->hSet('h', 'd', 't');
$redis->hGetAll('h', function ($result) {
var_export($result);
});
Resultado
array (
'a' => 'x',
'b' => 'y',
'c' => 'z',
'd' => 't',
)
hExists
Verifica si un campo específico de la tabla hash existe. Devuelve 1 si existe, 0 si el campo o la clave no existen, y false si hay un error.
$redis->hExists('h', 'a', function ($result) {
var_dump($result); //
});
hIncrBy
Se utiliza para incrementar el valor de un campo específico en la tabla hash por el valor especificado.
El incremento también puede ser un número negativo, lo que equivale a una operación de resta en el campo especificado.
Si la clave de la tabla hash no existe, se creará una nueva tabla hash y se ejecutará el comando HINCRBY.
Si el campo especificado no existe, se inicializará su valor en 0 antes de ejecutar el comando.
HINCRBY en un campo que almacena un valor de cadena devolverá false.
El valor de esta operación está limitado a 64 bits (números enteros con signo).
$redis->del('h');
$redis->hIncrBy('h', 'x', 2, function ($result) {
var_dump($result);
});
hIncrByFloat
Similar a hIncrBy, pero el incremento es un número decimal.
hMSet
Establece múltiples pares campo-valor en la tabla hash.
Este comando sobrescribirá los campos existentes en la tabla hash. Si la tabla hash no existe, se creará una tabla hash vacía y se ejecutará la operación HMSET.
$redis->del('h');
$redis->hMSet('h', ['name' => 'Joe', 'sex' => 1])
hMGet
Devuelve los valores de uno o varios campos dados de la tabla hash como un array asociativo.
Si el campo especificado no existe en la tabla hash, su valor correspondiente será null. Si la clave no es una tabla hash, devuelve false.
$redis->del('h');
$redis->hSet('h', 'field1', 'value1');
$redis->hSet('h', 'field2', 'value2');
$redis->hMGet('h', ['field1', 'field2', 'field3'], function ($r) {
var_export($r);
});
Salida
array (
'field1' => 'value1',
'field2' => 'value2',
'field3' => null
)
blPop, brPop
Elimina y obtiene el primer/último elemento de la lista. Si la lista está vacía, bloquea la lista hasta que haya un elemento para sacar o el tiempo de espera se agote.
$redis = new Client('redis://127.0.0.1:6379');
$redis2 = new Client('redis://127.0.0.1:6379');
$redis->blPop(['key1', 'key2'], 10, function ($r) {
var_export($r); // array ( 0 => 'key1', 1 => 'a')
});
Timer::add(1, function () use ($redis2) {
$redis2->lpush('key1', 'a');
});
bRPopLPush
Obtiene el último elemento de una lista y lo inserta al inicio de otra lista. Si la lista está vacía, bloquea la lista hasta que haya un elemento para sacar o el tiempo de espera se agote. Devuelve null si se agota el tiempo.
$redis = new Client('redis://127.0.0.1:6379');
$redis2 = new Client('redis://127.0.0.1:6379');
$redis->del(['key1', 'key2']);
$redis->bRPopLPush('key1', 'key2', 2, function ($r) {
var_export($r);
});
Timer::add(2, function () use ($redis2) {
$redis2->lpush('key1', 'a');
$redis2->lRange('key2', 0, -1, function ($r) {
var_dump($r);
});
}, null, false);
lIndex
Obtiene el elemento de una lista según el índice proporcionado. También se pueden usar índices negativos, donde -1 representa el último elemento de la lista, -2 el penúltimo, y así sucesivamente.
Devuelve null si el índice especificado está fuera del rango de la lista. Si la clave no es una lista, devuelve false.
$redis->del('key1');
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->lindex('key1', 0, function ($r) {
var_dump($r); // A
});
lInsert
Inserta un elemento antes o después de un elemento específico de la lista. No hace nada si el elemento especificado no está en la lista. Si la lista no existe, se considera una lista vacía y no se realiza ninguna operación.
Devuelve 0 si no se inserta ningún elemento, 1 si se inserta antes del elemento especificado, 4 si se inserta después del elemento especificado, y un array con los elementos de la lista después de la inserción.
Si la clave no es de tipo lista, devuelve false.
$redis->del('key1');
$redis->lInsert('key1', 'after', 'A', 'X', function ($r) {
var_dump($r); // 0
});
$redis->lPush('key1', 'A');
$redis->lPush('key1', 'B');
$redis->lPush('key1', 'C');
$redis->lInsert('key1', 'before', 'C', 'X', function ($r) {
var_dump($r); // 4
});
$redis->lRange('key1', 0, -1, function ($r) {
var_dump($r); // ['A', 'B', 'X', 'C']
});
lPop
Elimina y retorna el primer elemento de la lista.
Devuelve null si la lista no existe.
$redis->del('key1');
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->lPop('key1', function ($r) {
var_dump($r); // A
});
lPush
Inserta uno o más valores al principio de la lista. Si la clave no existe, se crea una lista vacía y se realiza la operación LPUSH.
Nota: En las versiones de Redis anteriores a la 2.4, el comando LPUSH solo acepta un valor único.
$redis->del('key1');
$redis->lPush('key1', 'A');
$redis->lPush('key1', ['B','C']);
$redis->lRange('key1', 0, -1, function ($r) {
var_dump($r); // ['C', 'B', 'A']
});
lPushx
Inserta un valor al principio de una lista existente, de lo contrario, la operación no tiene efecto y devuelve 0. Si la clave no es de tipo lista, devuelve false.
El valor devuelto después de la operación lPushx es la longitud de la lista.
$redis->del('key1');
$redis->lPush('key1', 'A');
$redis->lPushx('key1', ['B','C'], function ($r) {
var_dump($r); // 3
});
$redis->lRange('key1', 0, -1, function ($r) {
var_dump($r); // ['C', 'B', 'A']
});
lRange
Devuelve una lista de elementos especificados en la lista, utilizando un rango especificado por los desplazamientos START y END. Donde 0 representa el primer elemento de la lista, 1 el segundo elemento, y así sucesivamente. También se pueden usar índices negativos, donde -1 representa el último elemento de la lista, -2 el penúltimo, y así sucesivamente.
Devuelve un array que contiene los elementos especificados en el rango. Si la clave no es de tipo lista, devuelve false.
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C');
$redis->lRange('key1', 0, -1, function ($r) {
var_dump($r); // ['C', 'B', 'A']
});
lRem
Remueve los elementos de una lista que son iguales al valor especificado, según el parámetro COUNT.
Los valores posibles para COUNT son:
- count > 0: Comenzará a buscar desde el principio de la lista y eliminará los elementos coincidentes con VALUE en la cantidad de COUNT.
- count < 0: Comenzará a buscar desde el final de la lista y eliminará los elementos coincidentes con VALUE en la cantidad del valor absoluto de COUNT.
- count = 0: Elimina todos los valores coincidentes con VALUE de la lista.
Devuelve la cantidad de elementos eliminados. Devuelve 0 si la lista no existe. Devuelve false si la clave no es de tipo lista.
$redis->lRem('key1', 2, 'A', function ($r) {
var_dump($r);
});
lSet
Establece el valor de un elemento en la lista mediante un índice específico.
Devuelve true si tiene éxito, false si el índice está fuera de rango o si la lista está vacía.
$redis->lSet('key1', 0, 'X');
lTrim
Recorta una lista, es decir, mantiene solo los elementos dentro del intervalo especificado y elimina los elementos que están fuera de ese intervalo.
El índice 0 representa el primer elemento de la lista, 1 representa el segundo elemento, y así sucesivamente. También se pueden usar índices negativos, donde -1 representa el último elemento de la lista, -2 representa el penúltimo elemento, y así sucesivamente.
Devuelve true en caso de éxito y false en caso de fallo.
$redis->del('key1');
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C');
$redis->lRange('key1', 0, -1, function ($r) {
var_dump($r); // ['A', 'B', 'C']
});
$redis->lTrim('key1', 0, 1);
$redis->lRange('key1', 0, -1, function ($r) {
var_dump($r); // ['A', 'B']
});
rPop
Elimina el último elemento de la lista y devuelve el valor eliminado.
Cuando la lista no existe, devuelve null.
$redis->rPop('key1', function ($r) {
var_dump($r);
});
rPopLPush
Elimina el último elemento de una lista y lo añade a otra lista, devolviendo el elemento eliminado.
$redis->del('x', 'y');
$redis->lPush('x', 'abc');
$redis->lPush('x', 'def');
$redis->lPush('y', '123');
$redis->lPush('y', '456');
$redis->rPopLPush('x', 'y', function ($r) {
var_dump($r); // abc
});
$redis->lRange('x', 0, -1, function ($r) {
var_dump($r); // ['def']
});
$redis->lRange('y', 0, -1, function ($r) {
var_dump($r); // ['abc', '456', '123']
});
rPush
Inserta uno o varios valores al final de una lista y devuelve la longitud de la lista después de la inserción.
Si la lista no existe, se crea una lista vacía y se realiza la operación RPUSH. Si la lista existe pero no es del tipo lista, devuelve false.
Nota: Antes de la versión 2.4 de Redis, el comando RPUSH solo aceptaba un valor individual.
$redis->del('key1');
$redis->rPush('key1', 'A', function ($r) {
var_dump($r); // 1
});
rPushX
Inserta un valor al final de una lista existente y devuelve la longitud de la lista. Si la lista no existe, la operación es inválida y devuelve 0. Si la lista existe pero no es del tipo lista, devuelve false.
$redis->del('key1');
$redis->rPushX('key1', 'A', function ($r) {
var_dump($r); // 0
});
lLen
Devuelve la longitud de una lista. Si la lista 'key' no existe, se interpreta como una lista vacía y devuelve 0. Si 'key' no es del tipo lista, devuelve false.
$redis->del('key1');
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C');
$redis->lLen('key1', function ($r) {
var_dump($r); // 3
});
sAdd
Añade uno o varios elementos miembros a un conjunto. Los miembros existentes en el conjunto son ignorados.
Si el conjunto 'key' no existe, se crea un conjunto con los elementos añadidos. Si 'key' no es del tipo conjunto, devuelve false.
Nota: Antes de la versión 2.4 de Redis, el comando SADD solo aceptaba un miembro.
$redis->del('key1');
$redis->sAdd('key1' , 'member1');
$redis->sAdd('key1' , ['member2', 'member3'], function ($r) {
var_dump($r); // 2
});
$redis->sAdd('key1' , 'member2', function ($r) {
var_dump($r); // 0
});
sCard
Devuelve la cantidad de elementos en un conjunto. Cuando el conjunto 'key' no existe, devuelve 0.
$redis->del('key1');
$redis->sAdd('key1' , 'member1');
$redis->sAdd('key1' , 'member2');
$redis->sAdd('key1' , 'member3');
$redis->sCard('key1', function ($r) {
var_dump($r); // 3
});
$redis->sCard('keyX', function ($r) {
var_dump($r); // 0
});
sDiff
Devuelve los elementos únicos del primer conjunto que no están en otros conjuntos. Los conjuntos inexistentes se consideran como conjuntos vacíos.
$redis->del('s0', 's1', 's2');
$redis->sAdd('s0', '1');
$redis->sAdd('s0', '2');
$redis->sAdd('s0', '3');
$redis->sAdd('s0', '4');
$redis->sAdd('s1', '1');
$redis->sAdd('s2', '3');
$redis->sDiff(['s0', 's1', 's2'], function ($r) {
var_dump($r); // ['2', '4']
});
sDiffStore
Almacena la diferencia entre los conjuntos dados en el conjunto especificado. Si el conjunto especificado ya existe, se sobrescribe.
$redis->del('s0', 's1', 's2');
$redis->sAdd('s0', '1');
$redis->sAdd('s0', '2');
$redis->sAdd('s0', '3');
$redis->sAdd('s0', '4');
$redis->sAdd('s1', '1');
$redis->sAdd('s2', '3');
$redis->sDiffStore('dst', ['s0', 's1', 's2'], function ($r) {
var_dump($r); // 2
});
$redis->sMembers('dst', function ($r) {
var_dump($r); // ['2', '4']
});
sInter
Devuelve la intersección de todos los conjuntos dados. Los conjuntos inexistentes se consideran como conjuntos vacíos. Si alguno de los conjuntos está vacío, el resultado también estará vacío.
$redis->del('s0', 's1', 's2');
$redis->sAdd('key1', 'val1');
$redis->sAdd('key1', 'val2');
$redis->sAdd('key1', 'val3');
$redis->sAdd('key1', 'val4');
$redis->sAdd('key2', 'val3');
$redis->sAdd('key2', 'val4');
$redis->sAdd('key3', 'val3');
$redis->sAdd('key3', 'val4');
$redis->sInter(['key1', 'key2', 'key3'], function ($r) {
var_dump($r); // ['val4', 'val3']
});
sInterStore
Almacena la intersección de los conjuntos dados en el conjunto especificado y devuelve la cantidad de elementos almacenados. Si el conjunto ya existe, se sobrescribe.
$redis->sAdd('key1', 'val1');
$redis->sAdd('key1', 'val2');
$redis->sAdd('key1', 'val3');
$redis->sAdd('key1', 'val4');
$redis->sAdd('key2', 'val3');
$redis->sAdd('key2', 'val4');
$redis->sAdd('key3', 'val3');
$redis->sAdd('key3', 'val4');
$redis->sInterStore('output', 'key1', 'key2', 'key3', function ($r) {
var_dump($r); // 2
});
$redis->sMembers('output', function ($r) {
var_dump($r); // ['val4', 'val3']
});
sIsMember
Determina si un miembro es parte de un conjunto.
Si el miembro es parte del conjunto, devuelve 1. Si el miembro no es parte del conjunto o si la clave no existe, devuelve 0. Si la clave no es del tipo conjunto, devuelve false.
$redis->sIsMember('key1', 'member1', function ($r) {
var_dump($r);
});
sMembers
Devuelve todos los miembros de un conjunto. Si el conjunto no existe, se considera como un conjunto vacío.
$redis->sMembers('s', function ($r) {
var_dump($r);
});
sMove
Mueve un miembro específico desde un conjunto de origen a un conjunto de destino.
SMOVE es una operación atómica.
Si el conjunto de origen no existe o no contiene el miembro especificado, SMOVE no hace nada y devuelve 0. Si el miembro se elimina del conjunto de origen y se agrega al conjunto de destino, devuelve 1.
Si el conjunto de origen o destino no es del tipo conjunto, devuelve false.
$redis->sMove('key1', 'key2', 'member13');
sPop
Elimina uno o varios elementos aleatorios de un conjunto y los devuelve. Si el conjunto no existe o está vacío, devuelve null.
$redis->del('key1');
$redis->sAdd('key1' , 'member1');
$redis->sAdd('key1' , 'member2');
$redis->sAdd('key1' , 'member3');
$redis->sPop('key1', function ($r) {
var_dump($r); // member3
});
$redis->sAdd('key2', ['member1', 'member2', 'member3']);
$redis->sPop('key2', 3, function ($r) {
var_dump($r); // ['member1', 'member2', 'member3']
});
sRandMember
El comando Srandmember de Redis devuelve un elemento aleatorio de un conjunto.
A partir de la versión 2.6 de Redis, el comando Srandmember acepta un parámetro opcional 'count':
- Si 'count' es un número positivo menor que el tamaño del conjunto, devuelve un array con 'count' elementos únicos. Si 'count' es mayor o igual al tamaño del conjunto, devuelve el conjunto completo.
- Si 'count' es un número negativo, devuelve un array con elementos que pueden repetirse y la longitud es el valor absoluto de 'count'.
Esta operación es similar a SPOP, pero SPOP elimina el elemento aleatorio del conjunto y lo devuelve, mientras que Srandmember solo devuelve el elemento aleatorio sin modificar el conjunto.
$redis->del('key1');
$redis->sAdd('key1' , 'member1');
$redis->sAdd('key1' , 'member2');
$redis->sAdd('key1' , 'member3');
$redis->sRandMember('key1', function ($r) {
var_dump($r); // member1
});
$redis->sRandMember('key1', 2, function ($r) {
var_dump($r); // ['member1', 'member2']
});
$redis->sRandMember('key1', -100, function ($r) {
var_dump($r); // ['member1', 'member2', 'member3', 'member3', ...]
});
$redis->sRandMember('empty-set', 100, function ($r) {
var_dump($r); // []
});
$redis->sRandMember('not-a-set', 100, function ($r) {
var_dump($r); // []
});
sRem
Elimina uno o varios miembros de un conjunto, ignorando los miembros que no existen.
Devuelve la cantidad de elementos eliminados exitosamente, excluyendo los elementos ignorados.
Devuelve false si la clave no es de tipo conjunto.
Antes de la versión 2.4 de Redis, sRem solo aceptaba un valor único de miembro.
$redis->sRem('key1', ['member2', 'member3'], function ($r) {
var_dump($r);
});
sUnion
Devuelve la unión de los conjuntos dados. Los conjuntos que no existen se consideran como conjuntos vacíos.
$redis->sUnion(['s0', 's1', 's2'], function ($r) {
var_dump($r); // []
});
sUnionStore
Almacena la unión de los conjuntos dados en el conjunto destination especificado, y devuelve la cantidad de elementos. Si destination ya existe, se sobrescribe.
$redis->del('s0', 's1', 's2');
$redis->sAdd('s0', '1');
$redis->sAdd('s0', '2');
$redis->sAdd('s1', '3');
$redis->sAdd('s1', '1');
$redis->sAdd('s2', '3');
$redis->sAdd('s2', '4');
$redis->sUnionStore('dst', 's0', 's1', 's2', function ($r) {
var_dump($r); // 4
});
$redis->sMembers('dst', function ($r) {
var_dump($r); // ['1', '2', '3', '4']
});