webman-redis
Giriş
webeman/redis, workerman'ın asenkron redis bileşenine dayalıdır.
Not
Bu proje, özellikle redis asenkron aboneliği (subscribe, pSubscribe) gerçekleştirmeyi amaçlamaktadır.
Redis oldukça hızlı olduğu için, pSubscribe subscribe asenkron aboneliği gerekmeyen durumlarda, bu asenkron istemciyi kullanmanıza gerek yoktur, redis uzantısını kullanmak daha iyi performans sağlar.
Kurulum:
Composer require workerman/redis
Geriçağırım Kullanımı
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();
Coroutine Kullanımı
Not
Coroutine kullanımı workerman>=5.0 ve workerman/redis>=2.0.0 gerektirir ve composer require revolt/event-loop ^1.0.0 kurulu olmalıdır.
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();
Gerçekleştirilmeyen geriçağırım fonksiyonları olmadığında, istemci, asenkron istek sonuçlarını senkron bir şekilde döndürür ve istek süreci mevcut süreci bloke etmez, yani eşzamanlı olarak istekleri işleyebilir.
Not
psubscribe subscribe, coroutine kullanımını desteklemez.
Dokümantasyon
Notlar
Geriçağırım yönteminde, geriçağırım fonksiyonları genellikle iki parametreye sahiptir ($result, $redis), $result
sonuç ve $redis
redis örneğidir. Örneğin:
use Workerman\Redis\Client;
$redis = new Client('redis://127.0.0.1:6379');
// Geri çağırım fonksiyonunu ayarlama ile set çağrısını değerlendirme
$redis->set('key', 'value', function ($result, $redis) {
var_dump($result); // true
});
// Geri çağırım fonksiyonları her zaman isteğe bağlı parametrelerdir, burada geri çağrım fonksiyonu atlanmıştır
$redis->set('key1', 'value1');
// Geri çağırım fonksiyonları iç içe olabilir
$redis->get('key', function ($result, $redis){
$redis->set('key2', 'value2', function ($result) {
var_dump($result);
});
});
Bağlantı
use Workerman\Redis\Client;
// Geri çağırım atlandı
$redis = new Client('redis://127.0.0.1:6379');
// Geri çağırımla birlikte
$redis = new Client('redis://127.0.0.1:6379', [
'connect_timeout' => 10 // Bağlantı zaman aşımını 10 saniye olarak ayarla, varsayılan 5 saniye
], function ($success, $redis) {
// Bağlantı sonucu geri çağırımı
if (!$success) echo $redis->error();
});
auth
// Şifre doğrulama
$redis->auth('password', function ($result) {
});
// Kullanıcı adı ve şifre doğrulama
$redis->auth('username', 'password', function ($result) {
});
pSubscribe
Belirli bir modelle eşleşen bir veya daha fazla kanalı abone etmek için kullanılır.
Her model, * ile eşleşen karakter olarak kullanılır, örneğin it* it ile başlayan tüm kanallara eşleşir (it.news, it.blog, it.tweets vb.). news.* news. ile başlayan tüm kanallara eşleşir (news.it, news.global.today vb.). vb.
Not: pSubscribe geri çağırım fonksiyonu 4 parametreye sahiptir ($pattern, $channel, $message, $redis)
$redis örneği pSubscribe veya subscribe ara yüzünü çağırdıktan sonra, bu örnek başka bir yöntem çağırıldığında göz ardı edilir.
$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 içerik
});
Timer::add(5, function () use ($redis2){
$redis2->publish('news.add', 'news içerik');
});
subscribe
Belirli olarak verilen bir veya daha fazla kanalı abone etmek için kullanılır.
Not: subscribe geri çağırım fonksiyonu 3 parametreye sahiptir ($channel, $message, $redis)
$redis örneği pSubscribe veya subscribe ara yüzünü çağırdıktan sonra, bu örnek başka bir yöntem çağırıldığında göz ardı edilir.
$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 içerik
});
Timer::add(5, function () use ($redis2){
$redis2->publish('news', 'news içerik');
});
publish
Belirli bir kanala bilgi göndermek için kullanılır.
Bilgiyi alan abonelerin sayısını döndürür.
$redis2->publish('news', 'news içerik');
select
// Geri çağırım atlandı
$redis->select(2);
$redis->select('test', function ($result, $redis) {
// seçim parametresi bir numara olmalıdır, bu nedenle burada $result false olacaktır
var_dump($result, $redis->error());
});
get
Belirtilen anahtarın değerini almak için kullanılır. Eğer anahtar mevcut değilse, NULL döner. Eğer anahtarın sakladığı değer bir dize türü değilse, false döner.
$redis->get('key', function($result) {
// Anahtar yoksa NULL döner, hata olursa false döner
var_dump($result);
});
set
Verilen anahtarın değerini ayarlamak için kullanılır. Eğer anahtar zaten varsa, SET eski değeri geçersiz kılar ve türüne bakılmaksızın ezer.
$redis->set('key', 'value');
$redis->set('key', 'value', function($result){});
// Üçüncü parametrele geçerli zamanı iletebilirsiniz, 10 saniye sonra geçerlilik süresi dolar
$redis->set('key','value', 10);
$redis->set('key','value', 10, function($result){});
setEx, pSetEx
Belirtilen anahtarın değerini ve geçerlilik süresini ayarlamak için kullanılır. Eğer anahtar zaten varsa, SETEX komutu eski değeri değiştirir.
// İkinci parametre geçerlilik süresi iletilmelidir, saniye cinsinden
$redis->setEx('key', 3600, 'value');
// pSetEx birim olarak milisaniye alır
$redis->pSetEx('key', 3600, 'value');
del
Mevcut anahtarı silmek için kullanılır, sonuç olarak silinen anahtar sayısını döner (var olmayan anahtarlar sayılmaz).
// Bir anahtarı sil
$redis->del('key');
// Birden çok anahtarı sil
$redis->del(['key', 'key1', 'key2']);
setNx
Belirtilen anahtar henüz mevcut değilse, anahtarın belirtilen değerini ayarlamak için kullanılır.
$redis->del('key');
$redis->setNx('key', 'value', function($result){
var_dump($result); // 1
});
$redis->setNx('key', 'value', function($result){
var_dump($result); // 0
});
exists
Belirtilen anahtarın mevcut olup olmadığını kontrol etmek için kullanılır. Sonuç olarak mevcut anahtar sayısını döner.
$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
Belirtilen anahtarın değerini bir artırır/belirtilen değeri ekler. Eğer anahtar mevcut değilse, anahtarın değeri öncelikle 0 olarak ayarlanır ve daha sonra incr/incrBy işlemi gerçekleştirilir.
Eğer değeri yanlış bir türde ise veya dize türündeki değer bir sayıyı temsil edemiyorsa, false döner.
Başarılı ise artırılan değeri döner.
$redis->incr('key1', function ($result) {
var_dump($result);
});
$redis->incrBy('key1', 10, function ($result) {
var_dump($result);
});
incrByFloat
Belirtilen anahtarın değerine belirtilen kayan noktalı sayıyı ekler.
Eğer anahtar mevcut değilse, anahtarın değeri öncelikle 0 olarak ayarlanır ve daha sonra eklem işlemi gerçekleştirilir.
Eğer değeri yanlış bir türde ise veya dize türündeki değer bir sayıyı temsil edemiyorsa, false döner.
Başarılı ise artırılan değeri döner.
$redis->incrByFloat('key1', 1.5, function ($result) {
var_dump($result);
});
decr, decrBy
Komut, key'in depoladığı değeri bir/verilen azaltma miktarıyla azaltır.
Eğer key mevcut değilse, key'in değeri öncelikle 0 olarak başlatılır ve sonra decr/decrBy işlemi gerçekleştirilir.
Değer yanlış bir tipe sahipse veya string tipindeki değer bir sayıya dönüştürülemezse false döner.
Başarıyla azaltılan sayı değerini döndürür.
$redis->decr('key1', function ($result) {
var_dump($result);
});
$redis->decrBy('key1', 10, function ($result) {
var_dump($result);
});
mGet
Verilen key'lerin tümünün(tek veya birden fazla) değerlerini döndürür. Eğer verilen key'lerden biri mevcut değilse, o key NULL olarak döner.
$redis->set('key1', 'değer1');
$redis->set('key2', 'değer2');
$redis->set('key3', 'değer3');
$redis->mGet(['key0', 'key1', 'key5'], function ($result) {
var_dump($result); // [null, 'değer1', null];
});
getSet
Belirli bir key'in değerini ayarlamak ve key'in eski değerini döndürmek için kullanılır.
$redis->set('x', '42');
$redis->getSet('x', 'lol', function ($result) {
var_dump($result); // '42'
}) ;
$redis->get('x', function ($result) {
var_dump($result); // 'lol'
}) ;
randomKey
Mevcut veritabanından rastgele bir key döndürür.
$redis->randomKey(function($key) use ($redis) {
$redis->get($key, function ($result) {
var_dump($result);
}) ;
})
move
Mevcut veritabanındaki bir key'i belirtilen db veritabanına taşır.
$redis->select(0); // DB 0'a geçiş
$redis->set('x', '42'); // x'e 42 yaz
$redis->move('x', 1, function ($result) { // DB 1'e taşı
var_dump($result); // 1
}) ;
$redis->select(1); // DB 1'e geçiş
$redis->get('x', function ($result) {
var_dump($result); // '42'
}) ;
rename
Key'in adını değiştirir, key mevcut değilse false döner.
$redis->set('x', '42');
$redis->rename('x', 'y', function ($result) {
var_dump($result); // true
}) ;
renameNx
Yeni key mevcut değilse key'in adını değiştirir.
$redis->del('y');
$redis->set('x', '42');
$redis->renameNx('x', 'y', function ($result) {
var_dump($result); // 1
}) ;
expire
Key'in süresini ayarlar, süre bittiğinde key kullanılamaz. Birim saniyedir. Başarılıysa 1 döner, key mevcut değilse 0, hata olursa false döner.
$redis->set('x', '42');
$redis->expire('x', 3);
keys
Belirli model patternine uyan tüm key'leri bulur.
$redis->keys('*', function ($keys) {
var_dump($keys);
}) ;
$redis->keys('user*', function ($keys) {
var_dump($keys);
}) ;
type
Key'in depoladığı değerin tipini döndürür. Sonuç, string, set, list, zset, hash, none'den biridir; none, key'in mevcut olmamasını ifade eder.
$redis->type('key', function ($result) {
var_dump($result); // string set list zset hash none
}) ;
append
Eğer key mevcutsa ve bir string ise, APPEND komutu value'yu key'in mevcut değerinin sonuna ekler ve string uzunluğunu döndürür.
Eğer key mevcut değilse, APPEND basitçe verilen key'i value olarak ayarlar, SET key value gibi davranır ve string uzunluğunu döndürür.
Eğer key mevcut ise ama bir string değilse, false döner.
$redis->set('key', 'değer1');
$redis->append('key', 'değer2', function ($result) {
var_dump($result); // 12
}) ;
$redis->get('key', function ($result) {
var_dump($result); // 'değer1değer2'
}) ;
getRange
Belirtilen key'de depolanan string'in belirli bir alt dizisini alır. String'in kesme aralığı start ve end konumlarına göre belirlenir (start ve end dahil). Eğer key mevcut değilse, boş bir string döner. Key string tipinde değilse false döner.
$redis->set('key', 'string değer');
$redis->getRange('key', 0, 5, function ($result) {
var_dump($result); // 'string'
}) ;
$redis->getRange('key', -5, -1 , function ($result) {
var_dump($result); // 'değer'
}) ;
setRange
Belirtilen key'de depolanan string değerini belirtilen bir string ile değiştirir, değişiklik offset konumundan başlar. Eğer key mevcut değilse, verilen string olarak key'i ayarlar. Key bir string değilse false döner.
Sonuç olarak değişen string uzunluğunu döndürür.
$redis->set('key', 'Merhaba dünya');
$redis->setRange('key', 6, "redis", function ($result) {
var_dump($result); // 11
}) ;
$redis->get('key', function ($result) {
var_dump($result); // 'Merhaba redis'
}) ;
strLen
Belirtilen key'de depolanan string değerinin uzunluğunu alır. Key'in depoladığı bir string değilse, false döner.
$redis->set('key', 'değer');
$redis->strlen('key', function ($result) {
var_dump($result); // 5
}) ;
getBit
Key'de depolanan string değerinde, belirtilen konumda biti alır.
$redis->set('key', "\x7f"); // bu 0111 1111
$redis->getBit('key', 0, function ($result) {
var_dump($result); // 0
}) ;
setBit
Key'de depolanan string değerinde, belirtilen konumda biti ayarlar veya temizler.
Değişiklik öncesi değeri 0 veya 1 olarak döner.
$redis->set('key', "*"); // ord("*") = 42 = 0x2a = "0010 1010"
$redis->setBit('key', 5, 1, function ($result) {
var_dump($result); // 0
}) ;
bitOp
Birden fazla key (string değerler içeren) arasında bitsel operasyonu gerçekleştirir ve sonucu hedef keye depolar.
BITOP komutu dört bitsel işlemi destekler: AND, OR, XOR ve NOT.
Sonuç, hedef key'de depolanan stringin boyutudur, yani en uzun giriş stringinin boyutuna eşittir.
$redis->set('key1', "abc");
$redis->bitOp( 'AND', 'dst', 'key1', 'key2', function ($result) {
var_dump($result); // 3
}) ;
bitCount
String içinde ayarlanmış bit sayısını (nüfus sayımı) hesaplar.
Varsayılan olarak, tüm baytları kontrol eder. Yalnızca ek parametreler start ve end aralığında belirli bir sayım yapılabilir.
GETRANGE komutu gibi, başlangıç ve bitiş negatif değerler içerebilir, böylece dizeyi tersten indeksleyebilir, -1 son baytı, -2 sondan ikinci karakteri temsil eder, vb.
Sonuç, string içinde 1 olan bit sayısını döndürür.
Mevcut olmayan bir anahtar boş bir dize olarak ele alındığından, bu komut sıfırı döndürür.
$redis->set('key', 'merhaba');
$redis->bitCount( 'key', 0, 0, function ($result) {
var_dump($result); // 3
}) ;
$redis->bitCount( 'key', function ($result) {
var_dump($result); //21
}) ;
sort
sort komutu, list, set ve sıralı setin öğelerini sıralamak için kullanılır.
Prototip: sort($key, $options, $callback);
options aşağıdaki isteğe bağlı key ve value'ları içerir
$options = [
'by' => 'some_pattern_*',
'limit' => [0, 1],
'get' => 'some_other_pattern_*', // veya desen dizisi
'sort' => 'asc', // veya '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
Key'in kalan süresini saniye/milisaniye cinsinden döndürür.
Eğer key'in ttl'si yoksa -1 döner. Eğer key mevcut değilse -2 döner.
$redis->set('key', 'değer', 10);
// saniye cinsinden
$redis->ttl('key', function ($result) {
var_dump($result); // 10
});
// milisaniye cinsinden
$redis->pttl('key', function ($result) {
var_dump($result); // 9999
});
// key mevcut değil
$redis->pttl('key-yok', function ($result) {
var_dump($result); // -2
});
persist
Belirtilen anahtarın son kullanma süresini kaldırarak, anahtarın süresiz olarak kalmasını sağlar.
Başarıyla kaldırılırsa 1 döner; anahtar mevcut değilse veya son kullanma süresi yoksa 0 döner; hata oluşursa false döner.
$redis->persist('key');
mSet, mSetNx
Birden çok anahtar-değer çiftini atomik bir komutla ayarlar. mSetNx, tüm anahtarlar ayarlandığında sadece 1 döner.
Başarılıysa 1, başarısızsa 0 döner; hata oluşursa false döner.
$redis->mSet(['key0' => 'value0', 'key1' => 'value1']);
hSet
Hash tablosundaki bir alana değer atar.
Eğer alan yeni bir alansa ve değer başarılı bir şekilde ayarlandıysa 1 döner. Eğer hash tablosundaki alan zaten mevcutsa ve eski değeri yeni değerle değiştirildiyse 0 döner.
$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
Hash tablosunda bulunmayan bir alana değer atar.
Eğer hash tablosu mevcut değilse, yeni bir hash tablosu oluşturulur ve HSET işlemi gerçekleştirilir.
Eğer alan hash tablosunda zaten mevcutsa, işlem geçersiz olur.
Eğer anahtar mevcut değilse, yeni bir hash tablosu oluşturulur ve HSETNX komutu gerçekleştirilir.
$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
Belirtilen hash tablosundaki alana ait değeri döndürür.
Verilen alan veya anahtar mevcut değilse, null döner.
$redis->hGet('h', 'key1', function ($result) {
var_dump($result);
});
hLen
Hash tablosundaki alan sayısını almak için kullanılır.
Anahtar mevcut değilse, 0 döner.
$redis->del('h');
$redis->hSet('h', 'key1', 'hello');
$redis->hSet('h', 'key2', 'plop');
$redis->hLen('h', function ($result) {
var_dump($result); // 2
});
hDel
Komut, belirtilen alanları bir hash tablosundan siler. Mevcut olmayan alanlar görmezden gelinir.
Başarıyla silinen alanların sayısını döner; göz ardı edilen alanları döndürmez. Eğer anahtar bir hash dışıysa false döner.
$redis->hDel('h', 'key1');
hKeys
Hash tablosundaki tüm alanları bir dizi olarak alır.
Eğer anahtar mevcut değilse, boş bir dizi döner. Eğer anahtar hash türünde değilse, false döner.
$redis->hKeys('key', function ($result) {
var_dump($result);
});
hVals
Hash tablosundaki tüm alanların değerlerini bir dizi olarak döndürür.
Eğer anahtar mevcut değilse, boş bir dizi döner. Eğer anahtar hash türünde değilse, false döner.
$redis->hVals('key', function ($result) {
var_dump($result);
});
hGetAll
Hash tablosundaki tüm alanları ve değerlerini ilişkili dizi olarak döndürür.
Eğer anahtar mevcut değilse, boş bir dizi döner. Eğer anahtar hash türünde değilse, false döner.
$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);
});
Çıktı
array (
'a' => 'x',
'b' => 'y',
'c' => 'z',
'd' => 't',
)
hExists
Hash tablosundaki belirtilen alanın var olup olmadığını kontrol eder.
Eğer varsa 1, alan veya anahtar mevcut değilse 0, hata oluşursa false döner.
$redis->hExists('h', 'a', function ($result) {
var_dump($result); //
});
hIncrBy
Hash tablosundaki alanın değerine belirtilen artış miktarını ekler.
Artış miktarı negatif olabilir, belirtilen alanın değerini azaltır.
Eğer anahtar mevcut değilse, yeni bir hash tablosu oluşturulur ve HINCRBY komutu gerçekleştirilir.
Belirtilen alan mevcut değilse, komuttan önce alanın değeri sıfırlanır.
Bir dize değeri saklayan alana HINCRBY komutu uygulandığında false döner.
Bu işlemin değeri 64 bit işaretli sayı temsili içinde sınırlandırılmıştır.
$redis->del('h');
$redis->hIncrBy('h', 'x', 2, function ($result) {
var_dump($result);
});
hIncrByFloat
hIncrBy ile benzerdir, ancak artış miktarı ondalıklı sayıdır.
hMSet
Birden çok alan-değer çiftini hash tablosuna ayarlar.
Bu komut, hash tablosundaki var olan alanları üzerine yazar.
Eğer hash tablosu mevcut değilse, boş bir hash tablosu oluşturur ve HMSET işlemi gerçekleştirilir.
$redis->del('h');
$redis->hMSet('h', ['name' => 'Joe', 'sex' => 1])
hMGet
Hash tablosundaki belirtilen alanların değerini ilişkili dizi olarak döndürür.
Eğer belirtilen alanlardan herhangi biri hash tablosunda mevcut değilse, karşılık gelen alana null değeri atanır. Eğer anahtar bir hash değilse, false döner.
$redis->del('h');
$redis->hSet('h', 'field1', 'value1');
$redis->hSet('h', 'field2', 'value2');
$redis->hMGet('h', ['field1', 'field2', 'field3'], function ($r) {
var_export($r);
});
Çıktı
array (
'field1' => 'value1',
'field2' => 'value2',
'field3' => null
)
blPop, brPop
Listenin ilk/son elemanını kaldırır ve alır. Liste boşsa, bekleyerek belirli bir süreye veya çıkarılabilir bir elemanın bulunmasına kadar bekler.
$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
Listeden son elemanı alır ve diğer listeye ilk eleman olarak ekler; Liste boşsa, belirli bir süreye veya çıkarılabilir bir elemanın bulunmasına kadar bekler. Süre aşılarsa null döner.
$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
Listedeki bir elemanı indeks numarasına göre alır. Negatif indekslerde -1 son elemanı, -2 sondan bir önceki elemanı ifade eder.
Belirtilen indeks liste sınırlarının dışındaysa null döner. Anahtar bir liste türünde değilse, false döner.
$redis->del('key1']);
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->lindex('key1', 0, function ($r) {
var_dump($r); // A
});
lInsert
Listede belirli bir elemanın öncesine veya sonrasına yeni eleman ekler. Belirtilen eleman liste içinde yoksa herhangi bir işlem yapılmaz.
Belirtilen liste yoksa, boş bir liste olarak kabul edilir, herhangi bir işlem yapılmaz.
Eğer anahtar bir liste türünde değilse, false döner.
$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
Listeden ilk elemanı kaldırır ve döndürür.
Eğer liste mevcut değilse, null döner.
$redis->del('key1');
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->lPop('key1', function ($r) {
var_dump($r); // A
});
lPush
Bir veya daha fazla değeri listenin başına ekler. Eğer key mevcut değilse, LPUSH işlemi için boş bir liste oluşturulur. Key mevcut ancak liste türünde değilse false döner.
Not: Redis 2.4 sürümünden önceki LPUSH komutları yalnızca tek bir değer alır.
$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
Mevcut bir listenin başına bir değer ekler, liste mevcut değilse işlem geçersiz ve 0 döner. Key liste türünde değilse false döner.
Dönen değer lPushx komutu çalıştırıldıktan sonra listenin uzunluğudur.
$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
Belirtilen aralıktaki liste öğelerini döndürür. 0 listesinin ilk öğesini, 1 liste ikinci öğesini temsil eder. Negatif indekseler de kullanılabilir, -1 liste son öğesini, -2 liste sondan bir önceki öğeyi temsil eder.
Belirtilen aralıktaki öğeleri içeren bir dizi döner. Eğer key liste türünde değilse false döner.
$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
Parametre olarak verilen COUNT değerine göre liste içindeki VALUE ile eşleşen öğeleri kaldırır.
COUNT değeri şu şekilde olabilir:
- count > 0 : Başından itibaren VALUE ile eşleşen öğeleri kaldırır, miktar COUNT olur.
- count < 0 : Sondan başlayarak VALUE ile eşleşen öğeleri kaldırır, miktar COUNT'un mutlak değeridir.
- count = 0 : Tüm VALUE değerlerini kaldırır.
Kaldırılan öğelerin sayısını döner. Liste mevcut değilse 0 döner. Liste değilse false döner.
$redis->lRem('key1', 2, 'A', function ($r) {
var_dump($r);
});
lSet
İndeksine göre bir öğenin değerini ayarlar.
Başarılı olduğunda true döner, indeks parametresi aralık dışında ise veya boş bir liste için LSET kullanıldığında false döner.
$redis->lSet('key1', 0, 'X');
lTrim
Bir listeyi belirli bir aralıkta tutarak diğer öğeleri siler.
0 indis listenin ilk öğesini, 1 listenin ikinci öğesini temsil eder. Negatif indekseler de kullanılabilir, -1 liste son öğesini, -2 liste sondan bir önceki öğeyi temsil eder.
Başarılı olduğunda true, başarısız olduğunda false döner.
$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
Listenin son öğesini kaldırır ve kaldırılan öğeyi döndürür.
Eğer liste mevcut değilse, null döner.
$redis->rPop('key1', function ($r) {
var_dump($r);
});
rPopLPush
Listenin son öğesini kaldırır ve bu öğeyi başka bir listeye ekler, ardından öğeyi döndürür.
$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
Bir veya daha fazla değeri listenin sonuna (sağına) ekler ve eklenen listenin uzunluğunu döndürür.
Eğer liste mevcut değilse, boş bir liste oluşturulur ve RPUSH işlemi gerçekleştirilir. Listenin mevcut olması ancak liste türünde olmaması durumunda false döner.
Not: Redis 2.4 sürümünden önceki RPUSH komutları yalnızca tek bir değer alır.
$redis->del('key1');
$redis->rPush('key1', 'A', function ($r) {
var_dump($r); // 1
});
rPushX
Mevcut bir listenin sonuna bir değer ekler ve listenin uzunluğunu döndürür. Eğer liste mevcut değilse işlem geçersiz ve 0 döner. Listenin mevcut olması ancak liste türünde olmaması durumunda false döner.
$redis->del('key1');
$redis->rPushX('key1', 'A', function ($r) {
var_dump($r); // 0
});
lLen
Liste uzunluğunu döndürür. Eğer liste key mevcut değilse, key boş bir liste olarak kabul edilir ve 0 döner. Listenin liste türünde olmaması durumunda false döner.
$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
Bir veya daha fazla üye öğeyi kümelere ekler; kümede zaten varsa yok sayılır.
Eğer küme key mevcut değilse, yalnızca eklenen öğelerden oluşan bir küme oluşturulur.
Küme key'in küme türünde olmaması durumunda false döner.
Not: Redis 2.4 sürümünden önceki SADD yalnızca tek bir üye değer alır.
$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
Kümedeki öğelerin sayısını döndürür. Eğer küme key mevcut değilse 0 döner.
$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
Birinci kümenin diğer kümelere göre farkını döndürür, yani birinci kümede bulunan öğeleri döndürür. Mevcut olmayan küme key'leri boş küme olarak kabul edilir.
$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
Belirtilen kümeler arasındaki farkları belirtilen kümeye kaydeder. Belirtilen küme key zaten varsa üzerine yazar.
$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
Verilen tüm kümelerin kesişimini döndürür. Mevcut olmayan küme key'leri boş küme olarak kabul edilir. Verilen küme içinde en az bir boş küme varsa sonuç da boş küme olur.
$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
Belirtilen kümeler arasındaki kesişimi belirtilen bir kümede depolar ve depolanan kesişim kümesinin eleman sayısını döndürür. Belirtilen küme zaten varsa üzerine yazar.
$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
Üye elemanın kümeye ait olup olmadığını belirler.
Eğer üye eleman kümenin bir üyesiyse 1 döner. Eğer üye eleman kümenin bir üyesi değilse veya anahtar (key) mevcut değilse 0 döner. Eğer anahtar (key) bir küme türünde değilse false döner.
$redis->sIsMember('key1', 'member1', function ($r) {
var_dump($r);
});
sMembers
Kümedeki tüm üyeleri döndürür. Mevcut olmayan bir küme anahtarı boş bir küme olarak kabul edilir.
$redis->sMembers('s', function ($r) {
var_dump($r);
});
sMove
Belirtilen üye elemanı source kümesinden destination kümesine taşır.
SMOVE atomik bir işlemdir.
Eğer source küme mevcut değilse veya belirtilen üye elemanı içermiyorsa, SMOVE komutu herhangi bir işlem yapmaz, sadece 0 döner. Aksi takdirde, üye eleman source kümesinden kaldırılır ve destination kümesine eklenir.
Destination kümesi zaten üye elemanı içeriyorsa, SMOVE komutu sadece source kümesinden üye elemanını siler.
Eğer source veya destination bir küme türünde değilse false döner.
$redis->sMove('key1', 'key2', 'member13');
sPop
Belirtilen anahtara sahip kümeden bir veya daha fazla rastgele elemanı kaldırır ve kaldırılan elemanı döndürür.
Küme mevcut değilse veya boş bir küme ise null döner.
$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
Redis Srandmember komutu, bir kümenin rastgele bir elemanını döndürmek için kullanılır.
Redis 2.6 sürümünden itibaren, Srandmember komutu isteğe bağlı count parametresini kabul eder:
- count pozitif bir sayıysa ve küme temel sayısından küçükse, komut count adet eleman içeren bir dizi döndürür ve dizideki elemanlar birbirinden farklıdır. Eğer count küme temel sayısından büyük veya eşitse, tüm küme döner.
- count negatif bir sayıysa, komut elemanları tekrar edebilen count mutlak değeri uzunluğunda bir dizi döndürür.
Bu işlem SPOP komutuna benzer, ancak SPOP kümeden rastgele bir elemanı kaldırır ve döndürürken, Srandmember sadece rastgele elemanı döndürür, küme üzerinde herhangi bir değişiklik yapmaz.
$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
Kümeden bir veya daha fazla üye elemanı kaldırır, mevcut olmayan üye elemanlar göz ardı edilir.
Başarıyla kaldırılan elemanların sayısını döndürür, göz ardı edilen elemanlar dâhil değildir.
Anahtar (key) küme türünde değilse false döner.
Redis 2.4 sürümünden önce, SREM sadece tek bir üye değeri kabul ederdi.
$redis->sRem('key1', ['member2', 'member3'], function ($r) {
var_dump($r);
});
sUnion
Belirtilen kümelerin birleşimini döndürür. Mevcut olmayan küme anahtarları boş bir küme olarak kabul edilir.
$redis->sUnion(['s0', 's1', 's2'], function ($r) {
var_dump($r); // []
});
sUnionStore
Belirtilen kümelerin birleşimini belirtilen destination kümesinde depolar, ve eleman sayısını döndürür. Eğer destination mevcutsa üzerine yazar.
$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']
});