workerman-redis
Introduzione
workeman/redis è un componente redis asincrono basato su workerman.
Nota
L'obiettivo principale di questo progetto è implementare l'abbonamento asincrono a redis (subscribe, pSubscribe)
Poiché redis è abbastanza veloce, a meno che non sia necessario l'abbonamento asincrono psubscribe subscribe, non è necessario utilizzare questo client asincrono; l'utilizzo dell'estensione redis offrirà prestazioni migliori.
Installazione:
composer require workerman/redis ^v2.0.3
Uso del 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 delle coroutine
Nota
L'uso delle coroutine richiede workerman>=5.0, workerman/redis>=2.0.0 e installare 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 callback, il client restituirà il risultato della richiesta asincrona in modo sincrono, il processo di richiesta non blocca il processo attuale, il che significa che è possibile trattare le richieste in modo concorrente.
Nota
psubscribe subscribe non supporta l'uso delle coroutine.
Documentazione
Descrizione
Nel modo di callback, la funzione di callback ha generalmente 2 parametri ($result, $redis), dove $result è il risultato e $redis è l'istanza redis. Ad esempio:
use Workerman\Redis\Client;
$redis = new Client('redis://127.0.0.1:6379');
// Imposta la funzione di callback per verificare il risultato della chiamata set
$redis->set('key', 'value', function ($result, $redis) {
var_dump($result); // true
});
// Le funzioni di callback sono parametri facoltativi, qui la funzione di callback è stata omessa
$redis->set('key1', 'value1');
// Le funzioni di callback possono essere annidate
$redis->get('key', function ($result, $redis){
$redis->set('key2', 'value2', function ($result) {
var_dump($result);
});
});
Connessione
use Workerman\Redis\Client;
// Callback omesso
$redis = new Client('redis://127.0.0.1:6379');
// Con callback
$redis = new Client('redis://127.0.0.1:6379', [
'connect_timeout' => 10 // Imposta il timeout di connessione a 10 secondi, senza impostazione predefinita di 5 secondi
], function ($success, $redis) {
// Callback risultato della connessione
if (!$success) echo $redis->error();
});
auth
// Verifica password
$redis->auth('password', function ($result) {
});
// Verifica nome utente e password
$redis->auth('username', 'password', function ($result) {
});
pSubscribe
Sottoscrivi uno o più canali che corrispondono a un modello fornito.
Ogni modello usa come carattere jolly, ad esempio it corrisponde a tutti i canali che iniziano per it ( it.news, it.blog, it.tweets, ecc.). news.* corrisponde a tutti i canali che iniziano per news. ( news.it, news.global.today, ecc.), e così via.
Nota: la funzione di callback pSubscribe ha 4 parametri ($pattern, $channel, $message, $redis)
Quando l'istanza $redis chiama l'interfaccia pSubscribe o subscribe, le altre chiamate a metodi dell'istanza attuale vengono ignorate.
$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 le informazioni di uno o più canali specificati.
Nota: la funzione di callback subscribe ha 3 parametri ($channel, $message, $redis)
Quando l'istanza $redis chiama l'interfaccia pSubscribe o subscribe, le altre chiamate a metodi dell'istanza attuale vengono ignorate.
$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 informazioni al canale specificato.
Restituisce il numero di abbonati che hanno ricevuto l'informazione.
$redis2->publish('news', 'news content');
select
// Callback omesso
$redis->select(2);
$redis->select('test', function ($result, $redis) {
// Il parametro select deve essere un numero, quindi qui $result è false
var_dump($result, $redis->error());
});
get
Il comando è utilizzato per ottenere il valore della chiave specificata. Se la chiave non esiste, restituisce NULL. Se il valore memorizzato nella chiave non è di tipo stringa, restituisce false.
$redis->get('key', function($result) {
// Se la chiave non esiste restituisce NULL, se c'è un errore restituisce false
var_dump($result);
});
set
Usato per impostare il valore di una chiave specificata. Se la chiave ha già un valore memorizzato, SET sovrascrive il valore precedente, ignorando il tipo.
$redis->set('key', 'value');
$redis->set('key', 'value', function($result){});
// Il terzo parametro può specificare un tempo di scadenza, scade 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à, il comando SETEX sostituisce il valore vecchio.
// Nota: il secondo parametro specifica il tempo di scadenza in secondi
$redis->setEx('key', 3600, 'value');
// pSetEx il tempo è in millisecondi
$redis->pSetEx('key', 3600, 'value');
del
Utilizzato per eliminare una chiave esistente, il risultato restituito è un numero che rappresenta quanti key sono stati eliminati (le chiavi non esistenti non vengono conteggiate).
// Elimina una chiave
$redis->del('key');
// Elimina più chiavi
$redis->del(['key', 'key1', 'key2']);
setNx
(SETifNot eXists) Il comando imposta il valore specificato per la chiave solo se essa 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
Il comando è utilizzato per verificare se una chiave data esiste. Il risultato restituito è un numero che rappresenta 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 di uno/di un valore specificato il valore numerico memorizzato nella chiave. Se la chiave non esiste, il valore della chiave viene inizializzato a 0 e quindi si esegue l'operazione incr/incrBy.
Se il valore è di tipo errato, o se il valore di tipo stringa non può essere rappresentato come un numero, restituisce false.
Se ha successo, restituisce il valore aumentato.
$redis->incr('key1', function ($result) {
var_dump($result);
});
$redis->incrBy('key1', 10, function ($result) {
var_dump($result);
});
incrByFloat
Incrementa per un valore di tipo float il valore memorizzato nella chiave.
Se la chiave non esiste, INCRBYFLOAT imposterà prima il valore della chiave a 0, e poi eseguirà l'operazione di somma.
Se il valore è di tipo errato, o se il valore di tipo stringa non può essere rappresentato come un numero, restituisce false.
Se ha successo, restituisce il valore aumentato.
$redis->incrByFloat('key1', 1.5, function ($result) {
var_dump($result);
});
decr, decrBy
Il comando sottrae uno/un valore di sottrazione specificato a un valore memorizzato nella chiave.
Se la chiave non esiste, il valore della chiave viene inizializzato a 0 e quindi si esegue l'operazione decr/decrBy.
Se il valore è di tipo errato, o se il valore di tipo stringa non può essere rappresentato come un numero, restituisce false.
Se ha successo, restituisce il valore diminuito.
$redis->decr('key1', function ($result) {
var_dump($result);
});
$redis->decrBy('key1', 10, function ($result) {
var_dump($result);
});
mGet
Restituisce tutti i valori di una o più chiavi specificate. Se una delle chiavi specificate non esiste, restituisce 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 specificato per una chiave e restituire il valore vecchio 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 una chiave casuale dal database corrente.
$redis->randomKey(function($key) use ($redis) {
$redis->get($key, function ($result) {
var_dump($result);
}) ;
})
move
Sposta una chiave dal database corrente al database specificato db.
$redis->select(0); // passa al DB 0
$redis->set('x', '42'); // scrivi 42 in x
$redis->move('x', 1, function ($result) { // sposta al DB 1
var_dump($result); // 1
}) ;
$redis->select(1); // passa al DB 1
$redis->get('x', function ($result) {
var_dump($result); // '42'
}) ;
rename
Rinomina una chiave, se la chiave non esiste restituisce false.
$redis->set('x', '42');
$redis->rename('x', 'y', function ($result) {
var_dump($result); // true
}) ;
renameNx
Rinomina una chiave se la nuova chiave non esiste.
$redis->del('y');
$redis->set('x', '42');
$redis->renameNx('x', 'y', function ($result) {
var_dump($result); // 1
}) ;
expire
Imposta un tempo di scadenza per la chiave, dopo il quale la chiave non sarà più disponibile. L'unità è in secondi. Restituisce 1 se ha successo, 0 se la chiave non esiste o non ha un tempo di scadenza, e false se si verifica un errore.
$redis->set('x', '42');
$redis->expire('x', 3);
keys
Il comando viene utilizzato per cercare tutte le chiavi che corrispondono al modello pattern fornito.
$redis->keys('*', function ($keys) {
var_dump($keys);
}) ;
$redis->keys('user*', function ($keys) {
var_dump($keys);
}) ;
type
Restituisce il tipo del valore memorizzato nella chiave. Il risultato restituito è una stringa, che può essere string, set, list, zset, hash o none, dove none indica che la chiave non esiste.
$redis->type('key', function ($result) {
var_dump($result); // string set list zset hash none
}) ;
append
Se la chiave esiste già ed è una stringa, il comando APPEND aggiunge il valore alla fine del valore originale della chiave e restituisce la lunghezza della stringa.
Se la chiave non esiste, APPEND semplicemente imposta la chiave con il valore, come se eseguisse SET key value e restituisce la lunghezza della stringa.
Se la chiave esiste, ma non è di tipo stringa, restituisce 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
Ottiene la sottostringa memorizzata nella chiave specificata. L'intervallo di ritaglio della stringa è determinato da due offset: start e end (inclusi start e end). Se la chiave non esiste, restituisce la 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 stringa memorizzato nella chiave specificata con una stringa fornita, partendo dall'offset. Se la chiave non esiste, imposta la chiave sulla stringa specificata. Se la chiave non è di tipo stringa, restituisce false.
Il risultato è la lunghezza della stringa modificata.
$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 stringa memorizzato nella chiave specificata. Quando la chiave non memorizza valori stringa, restituisce false.
$redis->set('key', 'value');
$redis->strlen('key', function ($result) {
var_dump($result); // 5
}) ;
getBit
Ottiene il bit alla posizione specificata dell valore stringa memorizzato 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 alla posizione specificata dell valore stringa memorizzato nella chiave.
Il valore restituito è 0 o 1, è il valore prima della modifica.
$redis->set('key', "*"); // ord("*") = 42 = 0x2f = "0010 1010"
$redis->setBit('key', 5, 1, function ($result) {
var_dump($result); // 0
}) ;
bitOp
Esegue operazioni bitwise tra più chiavi (che contengono valori stringa) e memorizza il risultato nell chiave di destinazione.
Il comando BITOP supporta quattro operazioni bitwise: AND, OR, XOR e NOT.
Il risultato memorizzato nella chiave di destinazione è la dimensione della stringa, pari 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
Controlla il numero di bit impostati nella stringa (conteggio della popolazione).
Per impostazione predefinita, esamina tutti i byte contenuti nella stringa. Il conteggio può essere specificato solo all'interno dell'intervallo passando i parametri aggiuntivi start e end.
Simile al comando GETRANGE, start e end possono includere valori negativi per indicizzare i byte dalla fine della stringa, dove -1 è l'ultimo byte, -2 è il penultimo byte, e così via.
Il risultato è il numero di bit con valore 1 nella stringa.
Le chiavi non esistenti sono considerate stringhe vuote, quindi questo comando 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 list, set e sorted set.
Prototipo: sort($key, $options, $callback);
Dove options è la seguente chiave e valore 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 prima della scadenza della chiave in secondi/millisecondi.
Se la chiave non ha ttl, 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
});
// chiave non esiste
$redis->pttl('key-not-exists', function ($result) {
var_dump($result); // -2
});
persist
Rimuove il tempo di scadenza per la chiave data, rendendo la chiave mai scaduta.
Restituisce 1 se ha rimosso correttamente, 0 se la chiave non esiste o non ha un tempo di scadenza, e false se si verifica un errore.
$redis->persist('key');
mSet, mSetNx
Imposta più coppie chiave-valore in un unico comando atomico. mSetNx restituisce 1 solo se tutte le chiavi sono state impostate.
Restituisce 1 in caso di successo, 0 in caso di fallimento e false se si verifica un errore.
$redis->mSet(['key0' => 'value0', 'key1' => 'value1']);
hSet
Imposta un valore per un campo nella tabella hash.
Se il campo è un nuovo campo nella tabella hash e il valore è impostato correttamente, restituisce 1. Se il campo esiste già nella tabella hash e il valore precedente è stato sovrascritto dal nuovo valore, 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
Imposta un valore in un campo di hash non esistente.
Se la tabella hash non esiste, viene creata una nuova tabella hash e viene eseguita l'operazione HSET.
Se il campo esiste già nella tabella hash, l'operazione non ha effetto.
Se la chiave non esiste, viene creata una nuova tabella hash e viene eseguita l'operazione HSETNX.
$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 di un campo specificato nella tabella hash.
Se il campo o la chiave specificati non esistono, restituisce null.
$redis->hGet('h', 'key1', function ($result) {
var_dump($result);
});
hLen
Restituisce il numero di campi in una tabella hash.
Quando la chiave non esiste, restituisce 0.
$redis->del('h');
$redis->hSet('h', 'key1', 'hello');
$redis->hSet('h', 'key2', 'plop');
$redis->hLen('h', function ($result) {
var_dump($result); // 2
});
hDel
Elimina uno o più campi specificati dalla tabella hash. I campi che non esistono vengono ignorati.
Restituisce il numero di campi eliminati con successo, escluse le chiavi ignorate. Se la chiave non è di tipo hash, restituisce false.
$redis->hDel('h', 'key1');
hKeys
Restituisce tutti i campi nella tabella hash in forma di array.
Se la chiave non esiste, restituisce un array vuoto. Se la chiave non è di tipo hash, restituisce false.
$redis->hKeys('key', function ($result) {
var_dump($result);
});
hVals
Restituisce tutti i valori dei campi della tabella hash in forma di array.
Se la chiave non esiste, restituisce un array vuoto. Se la chiave non è di tipo hash, restituisce false.
$redis->hVals('key', function ($result) {
var_dump($result);
});
hGetAll
Restituisce tutti i campi e i valori della tabella hash in forma di 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);
});
Restituisce
array (
'a' => 'x',
'b' => 'y',
'c' => 'z',
'd' => 't',
)
hExists
Controlla se un campo specificato esiste nella tabella hash. Restituisce 1 se esiste, 0 se il campo non esiste o la chiave non esiste, e false in caso di errore.
$redis->hExists('h', 'a', function ($result) {
var_dump($result); //
});
hIncrBy
Incrementa il valore di un campo della tabella hash di un valore specificato.
L'incremento può essere anche negativo, equivalenti a un'operazione di sottrazione sul campo specificato.
Se la chiave della tabella hash non esiste, viene creata una nuova tabella hash e viene eseguito il comando HINCRBY.
Se il campo specificato non esiste, il valore del campo viene inizializzato a 0 prima di eseguire il comando.
Se si esegue HINCRBY su un campo memorizzato come valore stringa, restituirà false.
Il valore operativo è limitato a numeri interi 64 bit (bit) firmati.
$redis->del('h');
$redis->hIncrBy('h', 'x', 2, function ($result) {
var_dump($result);
});
hIncrByFloat
Simile a hIncrBy, solo che l'incremento è di tipo float.
hMSet
Imposta più coppie campo-valore (field-value) nella tabella hash.
Questo comando sovrascrive i campi già esistenti nella tabella hash.
Se la tabella hash non esiste, viene creata una tabella hash vuota e viene eseguita l'operazione HMSET.
$redis->del('h');
$redis->hMSet('h', ['name' => 'Joe', 'sex' => 1])
hMGet
Restituisce in forma di array associativo il valore di uno o più campi specificati nella tabella hash.
Se un campo specificato non esiste nella tabella hash, il valore corrispondente 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
Rimuove e ottiene il primo/ultimo elemento della lista. Se la lista è vuota, blocca la lista fino a quando non scade o trova un elemento da rimuovere.
$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 della lista e lo inserisce nella testa di un'altra lista; se non ci sono elementi nella lista, la lista rimane bloccata fino al timeout o fino al momento in cui trova un elemento da rimuovere. Se scade, restituisce null.
$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
Ottiene un elemento della lista in base all'indice. Puoi anche utilizzare indici negativi, dove -1 indica l'ultimo elemento della lista, -2 indica il penultimo elemento, e così via.
Se il valore dell'indice specificato non si trova nell'intervallo della lista, restituisce null. 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 nella lista. Quando l'elemento specificato non esiste nella lista, non esegue alcuna operazione.
Quando la lista non esiste, viene considerata come lista vuota e non esegue 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.
Quando la chiave della lista non esiste, restituisce null.
$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, viene creata una lista vuota e viene eseguita l'operazione LPUSH. Quando la chiave esiste ma non è di tipo lista, restituisce false.
Nota: nelle versioni di Redis 2.4 precedenti, 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 della lista che esiste già; se la lista non esiste, l'operazione non ha effetto e restituisce 0. Se la chiave non è di tipo lista, restituisce false.
Il valore restituito è la lunghezza della lista dopo l'esecuzione del comando 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 nella lista all'interno di un intervallo specificato; l'intervallo è determinato dagli offset START e END. Dove 0 indica il primo elemento della lista, 1 indica il secondo elemento della lista, e così via. Puoi anche utilizzare indici negativi, dove -1 indica l'ultimo elemento, -2 indica il penultimo elemento, e così via.
Restituisce un array contenente gli elementi all'interno dell'intervallo specificato. 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 dalla lista che corrispondono al valore specificato, in base al valore del parametro COUNT.
Il valore di COUNT può essere uno dei seguenti:
- count > 0 : cerca dalla testa della lista verso la coda e rimuove elementi uguali a VALUE, fino a COUNT elementi.
- count < 0 : cerca dalla coda verso la testa e rimuove elementi uguali a VALUE, fino all'assoluto valore di COUNT.
- count = 0 : rimuove tutti i valori che sono uguali a VALUE dalla lista.
Restituisce il numero di elementi rimossi. Restituisce 0 se la lista non esiste. Restituisce false se non è una lista.
$redis->lRem('key1', 2, 'A', function ($r) {
var_dump($r);
});
lSet
Imposta il valore di un elemento nella lista in base all'indice.
Restituisce true se ha successo, restituisce false se l'indice è fuori limite, o se si esegue LSET su una lista vuota.
$redis->lSet('key1', 0, 'X');
lTrim
Riduce la lista mantenendo solo gli elementi all'interno di un intervallo specificato, eliminando gli elementi al di fuori di tale intervallo.
L'indice 0 indica il primo elemento della lista, l'indice 1 indica il secondo elemento della lista, e così via. Puoi anche utilizzare indici negativi, dove -1 indica l'ultimo elemento, -2 indica il penultimo elemento, e così via.
Restituisce true se ha successo, false se fallisce.
$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, il valore restituito è l'elemento rimosso.
Quando la lista non esiste, restituisce null.
$redis->rPop('key1', function ($r) {
var_dump($r);
});
rPopLPush
Rimuove l'ultimo elemento della lista e lo aggiunge a un'altra lista, restituendo così il suo valore.
$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 (lato destro) e restituisce la lunghezza della lista inserita.
Se la lista non esiste, viene creata una lista vuota e viene eseguita l'operazione RPUSH. Quando la lista esiste ma non è di tipo lista, restituisce false.
Nota: nelle versioni di Redis 2.4 precedenti, il comando RPUSH accettava solo un singolo valore.
$redis->del('key1');
$redis->rPush('key1', 'A', function ($r) {
var_dump($r); // 1
});
rPushX
Inserisce un valore alla fine della lista già esistente (lato destro) e restituisce la lunghezza della lista. Se la lista non esiste, l'operazione è invalida e restituisce 0. Quando la lista esiste ma non è di tipo 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, la chiave è 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, i membri già presenti nell'insieme verranno ignorati.
Se la chiave dell'insieme non esiste, viene creata una nuova insieme che contiene solo gli elementi aggiunti.
Quando la chiave dell'insieme non è di tipo insieme, restituisce false.
Nota: nelle versioni di Redis 2.4 precedenti, il comando SADD accettava solo un singolo valore 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 membri nell'insieme. Quando 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 insieme, può essere considerato come gli elementi unici del primo insieme. Gli insiemi non esistenti vengono trattati come insiemi vuoti.
$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
Memoria la differenza tra dati insiemi specificati in un insieme specificato. Se l'insieme di destinazione esiste già, verrà sovrascritto.
$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. Gli insiemi non esistenti vengono trattati come insiemi vuoti. Se uno degli insiemi specificati è vuoto, il risultato sarà anche vuoto.
$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
Memorizza l'intersezione tra insiemi specificati e restituisce il numero di elementi nell'insieme di intersezione memorizzato. Se l'insieme di destinazione esiste già, verrà sovrascritto.
$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
Controlla se un membro è membro dell'insieme.
Restituisce 1 se il membro è membro dell'insieme. Restituisce 0 se il membro non è presente nell'insieme, o se la chiave non esiste. Se la chiave non è di tipo insieme, restituisce false.
$redis->sIsMember('key1', 'member1', function ($r) {
var_dump($r);
});
sMembers
Restituisce tutti i membri dell'insieme. Gli insiemi non esistenti vengono trattati come insiemi vuoti.
$redis->sMembers('s', function ($r) {
var_dump($r);
});
sMove
Sposta un membro specificato dall'insieme sorgente a un insieme di destinazione.
SMOVE è un'operazione atomica.
Se l'insieme sorgente non esiste o non contiene il membro specificato, il comando SMOVE non eseguirà alcuna operazione e restituirà solo 0. Altrimenti, il membro verrà rimosso dall'insieme sorgente e aggiunto all'insieme di destinazione.
Se l'insieme di destinazione esiste già e contiene già il membro, il comando SMOVE semplicemente rimuoverà il membro dall'insieme sorgente.
Se la sorgente o la destinazione non sono di tipo insieme, restituisce false.
$redis->sMove('key1', 'key2', 'member13');
sPop
Rimuove uno o più membri casuali di un dato insieme, e restituisce i membri rimossi.
Quando l'insieme è vuoto o non esiste, restituisce 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
Il comando Redis Srandmember è utilizzato per restituire un membro casuale dall'insieme.
A partire dalla versione 2.6 di Redis, il comando Srandmember accetta un parametro count opzionale:
- Se count è positivo e minore della cardinalità dell'insieme, il comando restituisce un array contenente count elementi, ciascuno diverso. Se count è maggiore o uguale alla cardinalità, restituisce l'intero insieme.
- Se count è negativo, il comando restituisce un array in cui i membri possono apparire più volte e la lunghezza dell'array è l'assoluto valore di count.
Questa operazione è simile a SPOP, ma SPOP rimuove e restituisce i membri casuali dall'insieme, mentre Srandmember restituirà solo membri casuali 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ù membri dall'insieme, ignorando i membri non presenti.
Restituisce il numero di membri rimossi con successo, non includendo i membri ignorati.
Quando la chiave non è di tipo insieme, restituisce false.
Nelle versioni di Redis 2.4 precedenti, il comando SREM accettava solo un singolo valore membro.
$redis->sRem('key1', ['member2', 'member3'], function ($r) {
var_dump($r);
});
sUnion
Il comando restituisce l'unione di insiemi specificati. Gli insiemi non esistenti vengono trattati come insiemi vuoti.
$redis->sUnion(['s0', 's1', 's2'], function ($r) {
var_dump($r); // []
});
sUnionStore
Memorizza l'unione di insiemi specificati in un insieme di destinazione e restituisce il numero di elementi. Se l'insieme di destinazione esiste già, verrà 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']
});