mirror of
https://github.com/php-win-ext/phpredis.git
synced 2026-03-29 12:32:11 +02:00
411 lines
11 KiB
PHP
411 lines
11 KiB
PHP
<?php
|
|
|
|
$r = new Redis();
|
|
$r->connect('127.0.0.1', 6379);
|
|
|
|
/* get, set, getSet, incr, incrby, decr, rename, renameNx */
|
|
function test1($r, $type) {
|
|
|
|
$ret = $r->multi($type)
|
|
->delete('key1')
|
|
->set('key1', 'value1')
|
|
->get('key1')
|
|
->getSet('key1', 'value2')
|
|
->get('key1')
|
|
->set('key2', 4)
|
|
->incr('key2')
|
|
->get('key2')
|
|
->decr('key2')
|
|
->get('key2')
|
|
->renameKey('key2', 'key3')
|
|
->get('key3')
|
|
->renameNx('key3', 'key1')
|
|
->renameKey('key3', 'key2')
|
|
->incr('key2', 5)
|
|
->get('key2')
|
|
->decr('key2', 5)
|
|
->get('key2')
|
|
->exec();
|
|
|
|
assert(is_array($ret));
|
|
$i = 0;
|
|
assert($ret[$i++] == TRUE);
|
|
assert($ret[$i++] == TRUE);
|
|
assert($ret[$i++] == 'value1');
|
|
assert($ret[$i++] == 'value1');
|
|
assert($ret[$i++] == 'value2');
|
|
assert($ret[$i++] == TRUE);
|
|
assert($ret[$i++] == 5);
|
|
assert($ret[$i++] == 5);
|
|
assert($ret[$i++] == 4);
|
|
assert($ret[$i++] == 4);
|
|
assert($ret[$i++] == TRUE);
|
|
assert($ret[$i++] == 4);
|
|
assert($ret[$i++] == FALSE);
|
|
assert($ret[$i++] == TRUE);
|
|
assert($ret[$i++] == TRUE);
|
|
assert($ret[$i++] == 9);
|
|
assert($ret[$i++] == TRUE);
|
|
assert($ret[$i++] == 4);
|
|
assert(count($ret) == $i);
|
|
|
|
$ret = $r->multi($type)
|
|
->delete('key1')
|
|
->delete('key2')
|
|
->set('key1', 'val1')
|
|
->setnx('key1', 'valX')
|
|
->setnx('key2', 'valX')
|
|
->exists('key1')
|
|
->exists('key3')
|
|
->ping()
|
|
->exec();
|
|
|
|
assert(is_array($ret));
|
|
assert($ret[0] == TRUE);
|
|
assert($ret[1] == TRUE);
|
|
assert($ret[2] == TRUE);
|
|
assert($ret[3] == FALSE);
|
|
assert($ret[4] == TRUE);
|
|
assert($ret[5] == TRUE);
|
|
assert($ret[6] == FALSE);
|
|
assert($ret[7] == '+PONG');
|
|
|
|
$ret = $r->multi($type)
|
|
->randomKey()
|
|
->exec();
|
|
$ret = $r->multi($type)
|
|
->exec();
|
|
assert($ret == array());
|
|
|
|
// ttl, mget, mset, msetnx, expire, expireAt
|
|
$ret = $r->multi($type)
|
|
->ttl('key')
|
|
->mget(array('key1', 'key2', 'key3'))
|
|
->mset(array('key3' => 'value3', 'key4' => 'value4'))
|
|
->set('key', 'value')
|
|
->expire('key', 5)
|
|
->ttl('key')
|
|
->expireAt('key', '0000')
|
|
->exec();
|
|
assert(is_array($ret));
|
|
$i = 0;
|
|
assert($ret[$i++] == -1);
|
|
assert($ret[$i++] === array('val1', 'valX', FALSE)); // mget
|
|
assert($ret[$i++] === TRUE); // mset
|
|
assert($ret[$i++] === TRUE); // set
|
|
assert($ret[$i++] === TRUE); // expire
|
|
assert($ret[$i++] === 5); // ttl
|
|
assert($ret[$i++] === TRUE); // expireAt
|
|
assert(count($ret) == $i);
|
|
|
|
$ret = $r->multi($type)
|
|
->set('lkey', 'x')
|
|
->set('lDest', 'y')
|
|
->delete('lkey', 'lDest')
|
|
->rpush('lkey', 'lvalue')
|
|
->lpush('lkey', 'lvalue')
|
|
->lpush('lkey', 'lvalue')
|
|
->lpush('lkey', 'lvalue')
|
|
->lpush('lkey', 'lvalue')
|
|
->lpush('lkey', 'lvalue')
|
|
->rpoplpush('lkey', 'lDest')
|
|
->lGetRange('lDest', 0, -1)
|
|
->lpop('lkey')
|
|
->llen('lkey')
|
|
->lRemove('lkey', 'lvalue', 3)
|
|
->llen('lkey')
|
|
->lget('lkey', 0)
|
|
->lGetRange('lkey', 0, -1)
|
|
->lSet('lkey', 1, "newValue") // check errors on key not exists
|
|
->lGetRange('lkey', 0, -1)
|
|
->llen('lkey')
|
|
->exec();
|
|
|
|
assert(is_array($ret));
|
|
$i = 0;
|
|
assert($ret[$i++] === TRUE); // SET
|
|
assert($ret[$i++] === TRUE); // SET
|
|
assert($ret[$i++] === 2); // deleting 2 keys
|
|
assert($ret[$i++] === 1); // rpush, now 1 element
|
|
assert($ret[$i++] === 2); // lpush, now 2 elements
|
|
assert($ret[$i++] === 3); // lpush, now 3 elements
|
|
assert($ret[$i++] === 4); // lpush, now 4 elements
|
|
assert($ret[$i++] === 5); // lpush, now 5 elements
|
|
assert($ret[$i++] === 6); // lpush, now 6 elements
|
|
assert($ret[$i++] === 'lvalue'); // rpoplpush returns the element: "lvalue"
|
|
assert($ret[$i++] === array('lvalue')); // lDest contains only that one element.
|
|
assert($ret[$i++] === 'lvalue'); // removing a second element from lkey, now 4 elements left ↓
|
|
assert($ret[$i++] === 4); // 4 elements left, after 2 pops.
|
|
assert($ret[$i++] === 3); // removing 3 elements, now 1 left.
|
|
assert($ret[$i++] === 1); // 1 element left
|
|
assert($ret[$i++] === "lvalue"); // this is the current head.
|
|
assert($ret[$i++] === array("lvalue")); // this is the current list.
|
|
assert($ret[$i++] === FALSE); // updating a non-existent element fails.
|
|
assert($ret[$i++] === array("lvalue")); // this is the current list.
|
|
assert($ret[$i++] === 1); // 1 element left
|
|
assert(count($ret) == $i);
|
|
|
|
|
|
$ret = $r->multi(Redis::PIPELINE)
|
|
->delete('lkey', 'lDest')
|
|
->rpush('lkey', 'lvalue')
|
|
->lpush('lkey', 'lvalue')
|
|
->lpush('lkey', 'lvalue')
|
|
->rpoplpush('lkey', 'lDest')
|
|
->lGetRange('lDest', 0, -1)
|
|
->lpop('lkey')
|
|
->exec();
|
|
assert(is_array($ret));
|
|
$i = 0;
|
|
assert($ret[$i++] <= 2); // deleted 0, 1, or 2 items
|
|
assert($ret[$i++] === 1); // 1 element in the list
|
|
assert($ret[$i++] === 2); // 2 elements in the list
|
|
assert($ret[$i++] === 3); // 3 elements in the list
|
|
assert($ret[$i++] === 'lvalue'); // rpoplpush returns the element: "lvalue"
|
|
assert($ret[$i++] === array('lvalue')); // rpoplpush returns the element: "lvalue"
|
|
assert($ret[$i++] === 'lvalue'); // pop returns the front element: "lvalue"
|
|
assert(count($ret) == $i);
|
|
|
|
}
|
|
|
|
function test2($r, $type) {
|
|
|
|
// general command
|
|
$ret = $r->multi($type)
|
|
->select(3)
|
|
->set('keyAAA', 'value')
|
|
->set('keyAAB', 'value')
|
|
->dbSize()
|
|
->lastsave()
|
|
->exec();
|
|
$i = 0;
|
|
assert(is_array($ret));
|
|
assert($ret[$i++] === TRUE); // select
|
|
assert($ret[$i++] === TRUE); // set
|
|
assert($ret[$i++] === TRUE); // set
|
|
assert(is_long($ret[$i++])); // dbsize
|
|
assert(is_long($ret[$i++])); // lastsave
|
|
|
|
assert(count($ret) === $i);
|
|
|
|
$ret = $r->multi($type)
|
|
->delete('key1')
|
|
->set('key1', 'value1')
|
|
->get('key1')
|
|
->getSet('key1', 'value2')
|
|
->get('key1')
|
|
->set('key2', 4)
|
|
->incr('key2')
|
|
->get('key2')
|
|
->decr('key2')
|
|
->get('key2')
|
|
->renameKey('key2', 'key3')
|
|
->get('key3')
|
|
->renameNx('key3', 'key1')
|
|
->renameKey('key3', 'key2')
|
|
->incr('key2', 5)
|
|
->get('key2')
|
|
->decr('key2', 5)
|
|
->get('key2')
|
|
->exec();
|
|
|
|
assert(is_array($ret));
|
|
assert($ret[0] == TRUE);
|
|
assert($ret[1] == TRUE);
|
|
assert($ret[2] == 'value1');
|
|
assert($ret[3] == 'value1');
|
|
assert($ret[4] == 'value2');
|
|
assert($ret[5] == TRUE);
|
|
assert($ret[6] == 5);
|
|
assert($ret[7] == 5);
|
|
assert($ret[8] == 4);
|
|
assert($ret[9] == 4);
|
|
assert($ret[10] == TRUE);
|
|
assert($ret[11] == 4);
|
|
assert($ret[12] == FALSE);
|
|
assert($ret[13] == TRUE);
|
|
assert($ret[14] == TRUE);
|
|
assert($ret[15] == 9);
|
|
assert($ret[16] == TRUE);
|
|
assert($ret[17] == 4);
|
|
|
|
$ret = $r->multi($type)
|
|
->delete('key1')
|
|
->delete('key2')
|
|
->set('key1', 'val1')
|
|
->setnx('key1', 'valX')
|
|
->setnx('key2', 'valX')
|
|
->exists('key1')
|
|
->exists('key3')
|
|
->ping()
|
|
->exec();
|
|
|
|
assert(is_array($ret));
|
|
assert($ret[0] == TRUE);
|
|
assert($ret[1] == TRUE);
|
|
assert($ret[2] == TRUE);
|
|
assert($ret[3] == FALSE);
|
|
assert($ret[4] == TRUE);
|
|
assert($ret[5] == TRUE);
|
|
assert($ret[6] == FALSE);
|
|
assert($ret[7] == '+PONG');
|
|
|
|
$ret = $r->multi($type)
|
|
->randomKey()
|
|
->exec();
|
|
|
|
assert(is_array($ret) && count($ret) === 1);
|
|
assert(is_string($ret[0]));
|
|
|
|
/* ttl, mget, mset, msetnx, expire, expireAt */
|
|
$ret = $r->multi($type)
|
|
->ttl('key')
|
|
->mget(array('key1', 'key2', 'key3'))
|
|
->mset(array('key3' => 'value3', 'key4' => 'value4'))
|
|
->set('key', 'value')
|
|
->expire('key', 5)
|
|
->ttl('key')
|
|
->expireAt('key', '0000')
|
|
->exec();
|
|
$i = 0;
|
|
assert(is_array($ret));
|
|
assert(is_long($ret[$i++]));
|
|
var_dump($ret);
|
|
assert(is_array($ret[$i]) && count($ret[$i]) === 3); // mget
|
|
$i++;
|
|
assert($ret[$i++] === TRUE); // mset always returns TRUE
|
|
assert($ret[$i++] === TRUE); // set always returns TRUE
|
|
assert($ret[$i++] === TRUE); // expire always returns TRUE
|
|
assert($ret[$i++] === 5); // TTL was just set.
|
|
assert($ret[$i++] === TRUE); // expireAt returns TRUE for an existing key
|
|
assert(count($ret) === $i);
|
|
|
|
/* lists */
|
|
$ret = $r->multi($type)
|
|
->rpush('lkey', 'lvalue')
|
|
->lpush('lkey', 'lvalue')
|
|
->lpush('lkey', 'lvalue')
|
|
->lpush('lkey', 'lvalue')
|
|
->lpush('lkey', 'lvalue')
|
|
->lpush('lkey', 'lvalue')
|
|
->rpoplpush('lkey', 'lDest')
|
|
->lGetRange('lDest', 0, -1)
|
|
->lpop('lkey')
|
|
->llen('lkey')
|
|
->lRemove('lkey', 'lvalue', 3)
|
|
->llen('lkey')
|
|
->lget('lkey', 0)
|
|
->lGetRange('lkey', 0, -1)
|
|
->lSet('lkey', 1, "newValue") /* check errors on key not exists */
|
|
->lGetRange('lkey', 0, -1)
|
|
->llen('lkey')
|
|
->exec();
|
|
|
|
var_dump($ret);
|
|
|
|
/* sets */
|
|
$ret = $r->multi($type)
|
|
->sadd('skey1', 'sValue1')
|
|
->sadd('skey1', 'sValue2')
|
|
->sadd('skey1', 'sValue3')
|
|
->sadd('skey1', 'sValue4')
|
|
|
|
->sadd('skey2', 'sValue1')
|
|
->sadd('skey2', 'sValue2')
|
|
|
|
->sSize('skey1')
|
|
->sremove('skey1', 'sValue2')
|
|
->sSize('skey1')
|
|
->sMove('skey1', 'skey2', 'sValue4')
|
|
->sSize('skey2')
|
|
->sContains('skey2', 'sValue4')
|
|
->sMembers('skey1')
|
|
->sMembers('skey2')
|
|
->sInter('skey1', 'skey2')
|
|
->sInterStore('skeydest', 'skey1', 'skey2')
|
|
->sMembers('skeydest')
|
|
->sPop('skey2')
|
|
->sSize('skey2')
|
|
->sUnion('skey2', 'skeydest')
|
|
->sUnionStore('skeyUnion', 'skey2', 'skeydest')
|
|
->sMembers('skeyUnion')
|
|
->sDiff('skey1', 'skey2')
|
|
->sDiffStore('sDiffDest', 'skey1', 'skey2')
|
|
->sMembers('sDiffDest')
|
|
->exec();
|
|
var_dump($ret);
|
|
|
|
/* sets */
|
|
$ret = $r->multi($type)
|
|
->zadd('zkey1', 1, 'zValue1')
|
|
->zadd('zkey1', 5, 'zValue5')
|
|
->zadd('zkey1', 2, 'zValue2')
|
|
->zrange('zkey1', 0, -1)
|
|
->zDelete('zkey1', 'zValue2')
|
|
->zrange('zkey1', 0, -1)
|
|
->zadd('zkey1', 11, 'zValue11')
|
|
->zadd('zkey1', 12, 'zValue12')
|
|
->zadd('zkey1', 13, 'zValue13')
|
|
->zadd('zkey1', 14, 'zValue14')
|
|
->zadd('zkey1', 15, 'zValue15')
|
|
->zDeleteRangeByScore('zkey1', 11, 13)
|
|
->zrange('zkey1', 0, -1)
|
|
->zReverseRange('zkey1', 0, -1)
|
|
//->zRangeByScore('zkey1', 1, 6) /* seg fault */
|
|
->zCard('zkey1')
|
|
//->zScore('zkey1', 'zValue15') /* no result */
|
|
->zadd('zkey2', 5, 'zValue5')
|
|
->zadd('zkey2', 2, 'zValue2')
|
|
//->zRange('zkey1', 'zkey2')
|
|
->zInter('zInter', array('zkey1', 'zkey2'))
|
|
->zRange('zkey1', 0, -1)
|
|
->zRange('zkey2', 0, -1)
|
|
->zRange('zInter', 0, -1)
|
|
->zInter('zUnion', array('zkey1', 'zkey2'))
|
|
->zRange('zUnion', 0, -1)
|
|
->zadd('zkey5', 5, 'zValue5')
|
|
->zIncrBy('zkey5', 3, 'zValue5') /* fix this */
|
|
->zScore('zkey5', 'zValue5')
|
|
->exec();
|
|
var_dump($ret);
|
|
|
|
/* hash */
|
|
$ret = $r->multi($type)
|
|
->hset('hkey1', 'key1', 'value1')
|
|
->hset('hkey1', 'key2', 'value2')
|
|
->hset('hkey1', 'key3', 'value3')
|
|
->hget('hkey1', 'key1')
|
|
->hlen('hkey1')
|
|
//->hdel('hkey1', 'key2')
|
|
//->hexists('hkey1', 'key2')
|
|
->hkeys('hkey1')
|
|
->hvals('hkey1')
|
|
->hgetall('hkey1') /* bug */
|
|
//->hincrby()
|
|
->exec();
|
|
var_dump($ret);
|
|
}
|
|
|
|
|
|
$count = 10000;
|
|
$count = 1;
|
|
|
|
for($i = 1; $i <= $count; $i++) {
|
|
//test1($r, Redis::MULTI);
|
|
//test1($r, Redis::PIPELINE);
|
|
|
|
test2($r, Redis::MULTI);
|
|
//test2($r, Redis::PIPELINE);
|
|
/*
|
|
$r->multi(Redis::MULTI)
|
|
->get('x')
|
|
->exec();
|
|
*/
|
|
if($i >= 1000 && $i % ($count/1000) == 0) {
|
|
echo sprintf("%0.1f", 100 * $i/$count)."% (sent ". number_format($i) ." commands)\n";
|
|
}
|
|
}
|
|
|
|
|
|
?>
|