phpでredis clusterクラスタを使用する
phpredis
で、cで書かれたphpの効率的な拡張です.https://github.com/phpredis/phpredisあ、もう1つはpredis
で、phpコードで書かれていて、たくさん使われています.https://github.com/nrk/predis. 私たちはそれぞれ彼らのクラスタでの使い方を見た.
phpredis
phpredisのインストール
私のMacにはphpredis拡張がインストールされていますが、2.*バージョンはclusterをサポートしていないので、3.0拡張にアップグレードする必要があります.アップグレードプロセスを記録します.
~ git clone git@github.com:phpredis/phpredis.git
~ cd phpredis
~ git fetch
~ git checout feature/redis_cluster # cluster
~ phpize
~ ./configure
~ make
~ make install
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20131226/
。 redis , php.ini :
extension=redis.so
3.0 redis 。 php-fpm。
➜ sudo kill -USR2 `cat /usr/local/var/run/php-fpm.pid`
:https://github.com/phpredis/phpredis/blob/feature/redis_cluster/cluster.markdown。 。
:
redis cluster :
$obj_cluster = new RedisCluster(NULL, ['192.168.33.13:7000', '192.168.33.13:7001', '192.168.33.13:7002', '192.168.33.13:7003', '192.168.33.13:7004']);
var_dump($obj_cluster);
NULL
, 。 , 。
redis cluster master 。 5 master, 5 。:
class RedisCluster#5 (0) {}
RedisClusterクラスリソース.redisが に したことを します.
では、 のredisの を に してみることができます.
$obj_cluster->set('name1', '1111');
$obj_cluster->set('name2', '2222');
$obj_cluster->set('name3', '333');
$name1 = $obj_cluster->get('name1');
$name2 = $obj_cluster->get('name2');
$name3 = $obj_cluster->get('name3');
var_dump($name1, $name2, $name3);die;
:
string(4) "1111"
string(4) "2222"
string(3) "333"
, 。 , 。
redis cluster ,
name1
,name2
,name3
3 key , , 3 slot , 3 。:
➜ redis-cli -h 192.168.33.13 -p 7009 -c
192.168.33.13:7009> get name1
-> Redirected to slot [12933] located at 192.168.33.13:7003
"1111"
192.168.33.13:7003> get name2
-> Redirected to slot [742] located at 192.168.33.13:7000
"2222"
192.168.33.13:7000> get name3
-> Redirected to slot [4807] located at 192.168.33.13:7001
"333"
192.168.33.13:7001>
, php phpredis , 。
phpredis
, :
// Connect and specify timeout and read_timeout
$obj_cluster = new RedisCluster(
NULL, Array("host:7000", "host:7001", 1.5, 1.5);
);
timeout
read_timeout
。 master 。
timeout
redis , 1.5 , 1.5 false 。
read_timeout
redis , key , key value , , 1.5 , 1.5 false。。 :
$obj_cluster = new RedisCluster(NULL, ['192.168.33.13:7000', '192.168.33.13:7001', '192.168.33.13:7002', '192.168.33.13:7003', '192.168.33.13:7004', 1.5, 1.5]);
master 2 。 。
master , , ???
:
$obj_cluster = new RedisCluster(NULL, ['192.168.33.13:7000', 1.5, 1.5]);
$obj_cluster->set('name1', '1111');
$name1 = $obj_cluster->get('name1');
var_dump($name1);
//
string(4) "1111"
。 , 。 。 , , 。
,
slave
, !!!
//7009 slave
$obj_cluster = new RedisCluster(NULL, ['192.168.33.13:7009', 1.5, 1.5]);
$obj_cluster->set('name1', '4555');
$name1 = $obj_cluster->get('name1');
var_dump($name1);
//
string(4) "4555"
。 , 。 。
, :zadd、lpop、hget 。 。
predis
predis
predis php php redis , , , ,
phpredis
, , 。redis
phpRedisAdmin
(https://github.com/ErikDubbelboer/phpRedisAdmin)predis
。, 。
composer
git clone
。 git clone 。 v1.03
➜ redis git clone git@github.com:nrk/predis.git
➜ redis cd predis
➜ predis git:(master) git checkout v1.0.3 #
➜ predis git:(84060b9)
OK, test.php , cluster 。
php
require 'predis/autoload.php';
$servers = [
'tcp://192.168.33.13:7000',
'tcp://192.168.33.13:7001',
'tcp://192.168.33.13:7002',
'tcp://192.168.33.13:7003',
'tcp://192.168.33.13:7004',
];
$options = ['cluster' => 'redis'];
$client = new Predis\Client($servers, $options);
$client->set('name1', '1111111');
$client->set('name2', '2222222');
$client->set('name3', '3333333');
$name1 = $client->get('name1');
$name2 = $client->get('name2');
$name3 = $client->get('name3');
var_dump($name1, $name2, $name3);die;
:
➜ redis php test.php
string(7) "1111111"
string(7) "2222222"
string(7) "3333333"
~
, , , , :
require 'predis/autoload.php';
$servers = [
'tcp://192.168.33.13:7000',
];
$options = ['cluster' => 'redis'];
$client = new Predis\Client($servers, $options);
$client->set('name1', '1111111');
:
$client->hset('name77', 'name', 'yang');
$b = $client->hget('name77', 'name');
...
...
, redis 。
~