webman-redis

Introduzione

webman/redis è un componente Redis asincrono basato su workerman.

Nota
Lo scopo principale di questo progetto è realizzare la sottoscrizione asincrona di Redis (subscribe, pSubscribe).
Poiché Redis è sufficientemente veloce, questo client asincrono è necessario solo per la sottoscrizione asincrona di ps psubscribe, altrimenti è consigliabile utilizzare l'estensione Redis per prestazioni migliori.

Installazione:

composer require workerman/redis

Uso Callback

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 Coroutine

Nota
L'uso delle coroutine richiede workerman>=5.0, workerman/redis>=2.0.0 e l'installazione di 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();

Quando non si impostano le funzioni di callback, il client utilizzerà le modalità di ritorno asincrone e non bloccherà il processo corrente durante le richieste, consentendo il processamento concorrente delle richieste.

Nota
L'uso delle coroutine non è supportato per psubscribe subscribe.

Documentazione

Spiegazione

Nel metodo di callback, di solito ci sono 2 parametri ($result, $redis) nella funzione di callback, where $result è il risultato e $redis è un'istanza di Redis. Ad esempio:

use Workerman\Redis\Client;
$redis = new Client('redis://127.0.0.1:6379');
// Imposta la funzione di callback per verificare i risultati della chiamata set
$redis->set('key', 'value', function ($result, $redis) {
    var_dump($result); // true
});
// Le funzioni di callback sono opzionali, qui viene omessa la funzione di callback
$redis->set('key1', 'value1');
// Le funzioni di callback possono essere nidificate
$redis->get('key', function ($result, $redis){
    $redis->set('key2', 'value2', function ($result) {
        var_dump($result);
    });
});

Connessione

use Workerman\Redis\Client;
// Funzione di callback omessa
$redis = new Client('redis://127.0.0.1:6379');
// Con funzione di callback
$redis = new Client('redis://127.0.0.1:6379', [
    'connect_timeout' => 10 // Impostazione del timeout di connessione a 10 secondi, valore predefinito 5 secondi se non impostato
], function ($success, $redis) {
    // Callback di risultato della connessione
    if (!$success) echo $redis->error();
});

Auth

// Verifica della password
$redis->auth('password', function ($result) {

});
// Verifica nome utente e password
$redis->auth('username', 'password', function ($result) {

});

pSubscribe

Sottoscrive uno o più canali che corrispondono a modelli specifici.

Ogni modello utilizza il carattere di come simbolo jolly. Ad esempio, it corrisponde a tutti i canali che iniziano con it (it.news, it.blog, it.tweets, ecc.). news.* corrisponde a tutti i canali che iniziano con news. (news.it, news.global.today, ecc.), e così via.

Nota: la funzione di callback di pSubscribe ha 4 parametri ($pattern, $channel, $message, $redis).

Dopo che un'istanza di $redis ha chiamato l'interfaccia pSubscribe o subscribe, chiamare altri metodi su questa istanza sarà ignorato.

$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

Utilizzato per sottoscrivere i messaggi per uno o più canali specifici.

Nota: la funzione di callback di subscribe ha 3 parametri ($channel, $message, $redis).

Dopo che un'istanza di $redis ha chiamato l'interfaccia pSubscribe o subscribe, chiamare altri metodi su questa istanza sarà ignorato.

$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

Utilizzato per inviare un messaggio a un canale specifico.

Restituisce il numero di abbonati che hanno ricevuto il messaggio.

$redis2->publish('news', 'news content');

Select

// Funzione di callback omessa
$redis->select(2);
$redis->select('test', function ($result, $redis) {
    // Il parametro select deve essere un numero, quindi $result sarà false in questo caso
    var_dump($result, $redis->error());
});

Get

Comando utilizzato per ottenere il valore di una chiave specifica. Se la chiave non esiste, restituisce NULL. Se il valore memorizzato in key non è di tipo stringa, restituisce false.

$redis->get('key', function($result) {
     // Se la chiave non esiste, restituisce NULL; se si verifica un errore, restituisce false
    var_dump($result);
});

Set

Utilizzato per impostare il valore di una chiave specifica. Se la chiave esiste già, sovrascrive il valore precedente, ignorando il tipo.

$redis->set('key', 'value');
$redis->set('key', 'value', function($result){});
// Il terzo parametro può essere utilizzato per specificare il tempo di scadenza, scaduto dopo 10 secondi
$redis->set('key','value', 10);
$redis->set('key','value', 10, function($result){});

SetEx, pSetEx

Imposta il valore e il tempo di scadenza per una chiave specificata. Se la chiave esiste già, pSetEx sostituirà il valore esistente.

// Notare che il secondo parametro specifica il tempo di scadenza in secondi
$redis->setEx('key', 3600, 'value'); 
// pSetEx utilizza il tempo in millisecondi
$redis->pSetEx('key', 3600, 'value'); 

Del

Utilizzato per eliminare una chiave esistente. Restituisce il numero di chiavi eliminate (le chiavi non esistenti non vengono conteggiate).

// Elimina una chiave
$redis->del('key');
// Elimina più chiavi
$redis->del(['key', 'key1', 'key2']);

SetNx

(Set if Not exists) Utilizzato per impostare il valore di una chiave solo se la chiave non esiste.

$redis->del('key');
$redis->setNx('key', 'value', function($result){
    var_dump($result); // 1
});
$redis->setNx('key', 'value', function($result){
    var_dump($result); // 0
});

Exists

Utilizzato per controllare se una chiave specificata esiste. Restituisce il numero di chiavi esistenti.

$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 il valore memorizzato nella chiave di uno o un valore specificato. Se la chiave non esiste, verrà inizializzata a 0 prima di eseguire l'operazione incr/incrBy.
Se il valore contiene un tipo errato, o se una stringa non può essere rappresentata come numero, restituirà false.
Restituisce il valore incrementato se successo.

$redis->incr('key1', function ($result) {
    var_dump($result);
}); 
$redis->incrBy('key1', 10, function ($result) {
    var_dump($result);
}); 

IncrByFloat

Incrementa il valore memorizzato nella chiave di un valore float specificato. Se la chiave non esiste, verrà inizializzata a 0 prima di eseguire l'operazione di incremento.
Se il valore contiene un tipo errato, o se una stringa non può essere rappresentata come numero, restituirà false.
Restituisce il valore incrementato.

$redis->incrByFloat('key1', 1.5, function ($result) {
    var_dump($result);
}); 

Decr, DecrBy

Decrementa il valore memorizzato nella chiave di uno o un valore specificato. Se la chiave non esiste, verrà inizializzata a 0 prima di eseguire l'operazione decr/decrBy.
Se il valore contiene un tipo errato, o se una stringa non può essere rappresentata come numero, restituirà false.
Restituisce il valore decrementato.

$redis->decr('key1', function ($result) {
    var_dump($result);
}); 
$redis->decrBy('key1', 10, function ($result) {
    var_dump($result);
}); 

mGet

Restituisce i valori di tutte le chiavi specificate. Se una chiave specificata non esiste, restituirà 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

Utilizzato per impostare il valore di una chiave specifica e restituire il vecchio valore della chiave.

$redis->set('x', '42');
$redis->getSet('x', 'lol', function ($result) {
    var_dump($result); // '42'
}) ;
$redis->get('x', function ($result) {
    var_dump($result); // 'lol'
}) ;

randomKey

Restituisce casualmente una chiave dal database corrente.

$redis->randomKey(function($key) use ($redis) {
    $redis->get($key, function ($result) {
        var_dump($result); 
    }) ;
})

move

Sposta la chiave del database corrente nel database specificato db.

$redis->select(0);  // passa al DB 0
$redis->set('x', '42'); // scrive 42 in x
$redis->move('x', 1, function ($result) {   // sposta in DB 1
    var_dump($result); // 1
}) ;  
$redis->select(1);  // passa al DB 1
$redis->get('x', function ($result) {
    var_dump($result); // '42'
}) ;

rename

Modifica il nome della chiave; se la chiave non esiste, restituisce false.

$redis->set('x', '42');
$redis->rename('x', 'y', function ($result) {
    var_dump($result); // true
}) ;

renameNx

Cambia il nome della chiave solo se il nuovo nome non esiste.

$redis->del('y');
$redis->set('x', '42');
$redis->renameNx('x', 'y', function ($result) {
    var_dump($result); // 1
}) ;

expire

Imposta il tempo di scadenza della chiave; dopo la scadenza la chiave non sarà più disponibile. Il tempo è misurato in secondi. Restituisce 1 in caso di successo, 0 se la chiave non esiste, e false in caso di errore.

$redis->set('x', '42');
$redis->expire('x', 3);

keys

Usato per trovare tutte le chiavi che corrispondono al modello specificato.

$redis->keys('*', function ($keys) {
    var_dump($keys); 
}) ;
$redis->keys('user*', function ($keys) {
    var_dump($keys); 
}) ;

type

Restituisce il tipo di valore memorizzato nella chiave. Il risultato sarà una stringa, che può essere string, set, list, zset, hash o none, che indica l'assenza della chiave.

$redis->type('key', function ($result) {
    var_dump($result); // string set list zset hash none
}) ;

append

Se la chiave esiste ed è una stringa, l'operazione APPEND aggiornerà il valore della chiave aggiungendo il valore alla fine e restituendo la lunghezza della stringa. Se la chiave non esiste, APPEND imposterà la chiave con il valore specificato e restituirà la lunghezza della stringa. Se la chiave esiste ma non è una stringa, restituirà false.

$redis->set('key', 'value1');
$redis->append('key', 'value2', function ($result) {
    var_dump($result); // 12
}) ; 
$redis->get('key', function ($result) {
    var_dump($result); // 'value1value2'
}) ;

getRange

Restituisce una sottostringa della stringa memorizzata nella chiave specificata. La sottostringa è determinata da due offset start e end (inclusi). Se la chiave non esiste, restituisce una stringa vuota. Se la chiave non è di tipo stringa, restituisce false.

$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

Sovrascrive il valore della chiave con la stringa specificata, a partire dall'offset specificato. Se la chiave non esiste, imposta la chiave con la stringa specificata e restituisce la lunghezza della stringa. Se la chiave non è di tipo stringa, restituisce false.

$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

Restituisce la lunghezza del valore della stringa memorizzato in una data chiave. Se la chiave non contiene una stringa, restituisce false.

$redis->set('key', 'value');
$redis->strlen('key', function ($result) {
    var_dump($result); // 5
}) ; 

getBit

Restituisce il valore del bit specificato all'offset della stringa memorizzata nella chiave.

$redis->set('key', "\x7f"); // questo è 0111 1111
$redis->getBit('key', 0, function ($result) {
    var_dump($result); // 0
}) ; 

setBit

Imposta o cancella il bit specificato all'offset della stringa memorizzata nella chiave. Restituisce 0 o 1 che rappresenta il valore prima della modifica.

$redis->set('key', "*");    // ord("*") = 42 = 0x2a = "0010 1010"
$redis->setBit('key', 5, 1, function ($result) {
    var_dump($result); // 0
}) ; 

bitOp

Esegue operazioni bitwise tra le chiavi (contenenti valori stringa) e memorizza il risultato nella chiave di destinazione.

Il comando BITOP supporta quattro operazioni bitwise: AND, OR, XOR e NOT.

Restituisce la dimensione della stringa memorizzata nella chiave di destinazione, che è uguale alla dimensione della stringa di input più lunga.

$redis->set('key1', "abc");
$redis->bitOp( 'AND', 'dst', 'key1', 'key2', function ($result) {
    var_dump($result); // 3
}) ;

bitCount

Conta il numero di bit impostati (conta la popolazione) nella stringa. Di default, verranno controllati tutti i byte della stringa. È possibile specificare un intervallo aggiuntivo con i parametri start e end. Come il comando GETRANGE, è possibile utilizzare valori negativi per indicizzare i byte dalla fine della stringa, dove -1 è l'ultimo byte, -2 è il penultimo, e così via. Restituisce il numero di bit impostati nella stringa, considerando solo i bit con valore 1. Se la chiave non esiste, restituirà zero.

$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

Il comando sort può ordinare gli elementi di una lista, di un insieme o di un insieme ordinato.

Prototipo: sort($key, $options, $callback);

L'opzione può essere specificata con i seguenti campi opzionali

$options = [
     'by' => 'some_pattern_*',
    'limit' => [0, 1],
    'get' => 'some_other_pattern_*', // o un array di pattern
    '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

Restituisce il tempo rimanente per la scadenza della chiave, in secondi o millisecondi.

Se la chiave non ha un tempo di scadenza, restituisce -1. Se la chiave non esiste, restituisce -2.

$redis->set('key', 'value', 10);
// in secondi
$redis->ttl('key', function ($result) {
    var_dump($result); // 10
});
// in millisecondi
$redis->pttl('key', function ($result) {
    var_dump($result); // 9999
});
// La chiave non esiste
$redis->pttl('key-not-exists', function ($result) {
    var_dump($result); // -2
});

persist

Rimuove la scadenza della chiave specificata, rendendola permanente.

Restituisce 1 se la scadenza è stata rimossa con successo, 0 se la chiave non esiste o non ha una scadenza impostata, e false in caso di errore.

$redis->persist('key');

mSet, mSetNx

Imposta contemporaneamente più coppie di chiave-valore in un'unica operazione atomica. In mSetNx, restituirà 1 solo se tutte le chiavi sono state impostate.

Restituisce 1 in caso di successo, 0 in caso di fallimento e false in caso di errore.

$redis->mSet(['key0' => 'value0', 'key1' => 'value1']);

hSet

Assegna un valore a un campo specifico di un hash. Se il campo è nuovo e il valore viene impostato correttamente, restituisce 1. Se il campo esiste già e il vecchio valore viene sovrascritto da uno nuovo, restituisce 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

Assegna un valore a un campo specifico di un hash solo se il campo non esiste. Se l'hash non esiste, viene creato e viene eseguita l'operazione di assegnazione HSETNX solo se il campo non esiste.

$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

Restituisce il valore del campo specificato in un hash. Se il campo o l'hash specificato non esistono, restituisce null.

$redis->hGet('h', 'key1', function ($result) {
    var_dump($result);
});

hLen

Utilizzato per ottenere il numero dei campi nel campo hash.

Quando la chiave non esiste, restituisce 0.

$redis->del('h');
$redis->hSet('h', 'key1', 'ciao');
$redis->hSet('h', 'key2', 'plop');
$redis->hLen('h', function ($result) {
    var_dump($result); // 2
});

hDel

Il comando viene utilizzato per eliminare uno o più campi specificati nel campo hash key; i campi inesistenti verranno ignorati.

Restituisce il numero di campi eliminati con successo, escludendo quelli ignorati. Se key non è un hash, restituisce false.

$redis->hDel('h', 'key1');

hKeys

Restituisce tutti i campi del hash come array.

Se la chiave non esiste, restituisce un array vuoto. Se la chiave non è un hash, restituisce false.

$redis->hKeys('key', function ($result) {
    var_dump($result);
});

hVals

Restituisce tutti i valori dei campi del hash come array.

Se la chiave non esiste, restituisce un array vuoto. Se la chiave non è un hash, restituisce false.

$redis->hVals('key', function ($result) {
    var_dump($result);
});

hGetAll

Restituisce tutti i campi e i valori del hash come array associativo.

Se la chiave non esiste, restituisce un array vuoto. Se la chiave non è di tipo hash, restituisce 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); 
});

Output

array (
    'a' => 'x',
    'b' => 'y',
    'c' => 'z',
    'd' => 't',
)

hExists

Controlla se il campo specificato esiste nel campo hash. Restituisce 1 se esiste, 0 se il campo o la chiave non esistono, e false in caso di errore.

$redis->hExists('h', 'a', function ($result) {
    var_dump($result); //
});

hIncrBy

Utilizzato per aumentare il valore del campo nel campo hash di una quantità specificata.

È possibile specificare un incremento negativo per effettuare una sottrazione. Se la chiave hash non esiste, verrà creata e sarà eseguito il comando HINCRBY.

Se il campo specificato non esiste, il suo valore viene inizializzato a 0 prima dell'esecuzione del comando.

Il comando restituisce false se viene eseguito su un campo che contiene una stringa.

Il valore dell'operazione è limitato a 64 bit di rappresentazione di numeri con segno.

$redis->del('h');
$redis->hIncrBy('h', 'x', 2,  function ($result) {
    var_dump($result);
});

hIncrByFloat

Simile a hIncrBy, ma l'incremento è di tipo float.

hMSet

Imposta contemporaneamente più coppie campo-valore nel campo hash.

Questo comando sovrascrive i campi esistenti nel campo hash. Se il campo hash non esiste, verrà creato un campo hash vuoto prima dell'esecuzione di HMSET.

$redis->del('h');
$redis->hMSet('h', ['name' => 'Joe', 'sex' => 1])

hMGet

Restituisce i valori dei campi specificati nel campo hash come array associativo.

Se il campo specificato non esiste nel campo hash, il suo valore sarà null. Se la chiave non è di tipo hash, restituisce 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);
});

Output

array (
 'field1' => 'value1',
 'field2' => 'value2',
 'field3' => null
)

blPop, brPop

Rimuovono e ottengono il primo/ultimo elemento della lista. Se la lista è vuota, verrà bloccata fino alla scadenza o fino a quando sarà disponibile un elemento da estrarre.

$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

Rimuove l'ultimo elemento dalla lista sorgente, lo sposta nella lista destinazione e lo restituisce. Se la lista è vuota, verrà bloccata fino alla scadenza.

$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

Restituisce l'elemento della lista corrispondente all'indice specificato. È possibile utilizzare indici negativi per accedere agli elementi dalla fine della lista.

Restituisce null se l'indice specificato non è nell'intervallo della lista. Se la chiave non è di tipo lista, restituisce false.

$redis->del('key1']);
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->lindex('key1', 0, function ($r) {
    var_dump($r); // A
});

lInsert

Inserisce un elemento prima o dopo un elemento specificato nella lista. Se l'elemento specificato non esiste nella lista, non viene eseguita alcuna operazione.

Se la lista non esiste, viene considerata vuota e non viene eseguita alcuna operazione.

Se la chiave non è di tipo lista, restituisce 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

Rimuove e restituisce il primo elemento della lista.

Restituisce null se la lista key non esiste.

$redis->del('key1');
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->lPop('key1', function ($r) {
    var_dump($r); // A
});

lPush

Inserisce uno o più valori all'inizio della lista. Se la chiave non esiste, verrà creata una lista vuota prima di eseguire LPUSH.

Nota: Prima della versione 2.4 di Redis, il comando LPUSH accettava solo un singolo valore.

$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

Inserisce un valore all'inizio di una lista esistente. Se la lista non esiste, l'operazione non viene eseguita e restituisce 0. Se la chiave non è di tipo lista, restituisce false.

Restituisce la lunghezza della lista dopo l'esecuzione di lPushx.

$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

Restituisce gli elementi della lista in un intervallo specificato. Gli indici partono da 0 e possono essere anche negativi per contare dal fondo della lista.

Restituisce un array contenente gli elementi specificati nell'intervallo. Se la chiave non è di tipo lista, restituisce 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

Rimuove gli elementi della lista che corrispondono al valore specificato in base al parametro COUNT.

COUNT può assumere i seguenti valori:

  • count > 0 : cerca dalla testa alla coda e rimuove COUNT elementi uguali a VALUE.
  • count < 0 : cerca dalla coda alla testa e rimuove |COUNT| elementi uguali a VALUE.
  • count = 0 : rimuove tutti gli elementi uguali a VALUE.

Restituisce il numero di elementi rimossi. Se la lista non esiste, restituisce 0. Se la chiave non è di tipo lista, restituisce false.

$redis->lRem('key1', 2, 'A', function ($r) {
    var_dump($r); 
});

lSet

Imposta il valore di un elemento della lista utilizzando l'indice specificato.

Restituisce true in caso di successo, false se l'indice specificato non è valido o se la lista è vuota.

$redis->lSet('key1', 0, 'X');

lTrim

La funzione lTrim taglia una lista, cioè mantiene solo gli elementi all'interno dell'intervallo specificato, eliminando gli elementi al di fuori dell'intervallo specificato.

L'indice 0 rappresenta il primo elemento della lista, 1 rappresenta il secondo elemento della lista e così via. È anche possibile utilizzare indici negativi, ad esempio -1 rappresenta l'ultimo elemento della lista, -2 rappresenta il penultimo elemento della lista e così via.

Restituisce true in caso di successo, false altrimenti.

$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

Utilizzato per rimuovere l'ultimo elemento della lista e restituisce il valore rimosso.

Restituisce null se la lista non esiste.

$redis->rPop('key1', function ($r) {
    var_dump($r);
});

rPopLPush

Rimuove l'ultimo elemento di una lista e lo aggiunge a un'altra lista, restituendo il valore rimosso.

$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

Inserisce uno o più valori alla fine della lista (a destra) e restituisce la lunghezza della lista dopo l'inserimento.

Se la lista non esiste, viene creata una lista vuota e l'operazione di RPUSH viene eseguita. Quando la lista esiste ma non è una lista, restituisce false.

Nota: Nella versione di Redis 2.4, il comando RPUSH accetta solo un singolo valore.

$redis->del('key1');
$redis->rPush('key1', 'A', function ($r) {
    var_dump($r); // 1
});

rPushX

Inserisce un valore nella lista esistente alla fine (destra) e restituisce la lunghezza della lista. Se la lista non esiste, l'operazione non viene eseguita e restituisce 0.

Se la lista esiste ma non è una lista, restituisce false.

$redis->del('key1');
$redis->rPushX('key1', 'A', function ($r) {
    var_dump($r); // 0
});

lLen

Restituisce la lunghezza della lista. Se la chiave della lista non esiste, viene interpretata come una lista vuota e restituisce 0. Se la chiave non è di tipo lista, restituisce 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

Aggiunge uno o più membri a un insieme, ignorando i membri già esistenti nell'insieme.

Se la chiave dell'insieme non esiste, viene creata un insieme contenente solo i membri aggiunti.

Restituisce false se la chiave non è di tipo insieme.

Nota: Nella versione di Redis 2.4, SADD accetta solo un singolo membro.

$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

Restituisce il numero di elementi nell'insieme. Se la chiave dell'insieme non esiste, restituisce 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

Restituisce la differenza tra il primo insieme e gli altri insiemi, ovvero gli elementi unici del primo insieme. Visti come insiemi vuoti gli insiemi mancanti.

$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

Salva la differenza tra gli insiemi specificati in un insieme specificato. Se la chiave specificata esiste, verrà sovrascritta.

$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

Restituisce l'intersezione di tutti gli insiemi specificati. Se un insieme specificato non esiste o è vuoto, l'intersezione sarà vuota.

$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

Salva l'intersezione degli insiemi specificati in un insieme specificato e restituisce il numero di elementi nell'insieme risultante. Sovrascrive la chiave specificata se esiste.

$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

Verifica se un membro è presente nell'insieme.

Restituisce 1 se il membro è presente, 0 se non è presente o la chiave non esiste, e false se la chiave corrispondente non è di tipo insieme.

$redis->sIsMember('key1', 'member1', function ($r) {
    var_dump($r); 
});

sMembers

Restituisce tutti i membri dell'insieme. Se la chiave dell'insieme non esiste, restituisce un insieme vuoto.

$redis->sMembers('s', function ($r) {
    var_dump($r); 
});

sMove

Muove un membro specificato dall'insieme di origine all'insieme di destinazione. L'operazione è atomica.

Se l'insieme di origine non esiste o non contiene il membro specificato, l'operazione non viene eseguita e restituisce 0. Se l'insieme di destinazione contiene già il membro, verrà semplicemente rimosso dall'insieme di origine.

Restituisce false se l'insieme di origine o di destinazione non è di tipo insieme.

$redis->sMove('key1', 'key2', 'member13');

sPop

Rimuove uno o più elementi casuali dall'insieme specificato e restituisce gli elementi rimossi.

Restituisce null se l'insieme non esiste o è vuoto.

$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

La funzione Srandmember di Redis restituisce un elemento casuale dall'insieme specificato.

A partire dalla versione 2.6 di Redis, Srandmember accetta un parametro opzionale count:

  • Se count è un numero positivo e inferiore alla cardinalità dell'insieme, restituirà un array di count elementi unici. Se count è maggiore o uguale alla cardinalità dell'insieme, restituirà l'intero insieme.
  • Se count è un numero negativo, restituirà un array di elementi che potrebbero ripetersi, con una lunghezza uguale al valore assoluto di count.

Questa operazione è simile a SPOP, ma mentre SPOP rimuove e restituisce l'elemento dall'insieme, Srandmember restituisce solo l'elemento senza modificare l'insieme.

$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

Rimuove uno o più elementi membri dal set e ignora quelli che non esistono.

Restituisce il numero di elementi rimossi con successo, escludendo quelli ignorati.

Restituisce false se la chiave non è di tipo set.

Prima della versione 2.4 di Redis, SREM accettava solo un singolo membro.

$redis->sRem('key1', ['member2', 'member3'], function ($r) {
    var_dump($r); 
});

sUnion

Restituisce l'unione dei set forniti. I set inesistenti vengono trattati come set vuoti.

$redis->sUnion(['s0', 's1', 's2'], function ($r) {
    var_dump($r); // []
});

sUnionStore

Calcola l'unione dei set forniti e la memorizza nel set di destinazione specificato, restituendo il numero di elementi. Se il set di destinazione esiste già, viene sovrascritto.

$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']
});