phpでredis clusterクラスタを使用する

57036 ワード

現在使用されているphpのredis拡張は主に2つあり、1つ目は最もよく使われているphpredisで、cで書かれたphpの効率的な拡張です.https://github.com/phpredis/phpredisあ、もう1つはpredisで、phpコードで書かれていて、たくさん使われています.https://github.com/nrk/predis.
私たちはそれぞれ彼らのクラスタでの使い方を見た.
phpredis
phpredisのインストール
私のMacにはphpredis拡張がインストールされていますが、2.*バージョンはclusterをサポートしていないので、3.0拡張にアップグレードする必要があります.アップグレードプロセスを記録します.
 
  
  1. ~ git clone git@github.com:phpredis/phpredis.git
  2. ~ cd phpredis
  3. ~ git fetch
  4. ~ git checout feature/redis_cluster # cluster
  5. ~ phpize
  6. ~ ./configure
  7. ~ make
  8. ~ make install
  9. Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20131226/

。 redis , php.ini :

 
  
  1. extension=redis.so

3.0 redis 。 php-fpm。

 
  
  1. sudo kill -USR2 `cat /usr/local/var/run/php-fpm.pid`

:https://github.com/phpredis/phpredis/blob/feature/redis_cluster/cluster.markdown。 。

redis cluster :

 
  
  1. $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']);
  2. var_dump($obj_cluster);

NULL  , 。 , 。 
redis cluster master 。 5 master, 5 。

class RedisCluster#5 (0) {}

RedisClusterクラスリソース.redisが に したことを します.
では、 のredisの を に してみることができます.
 
  
  1. $obj_cluster->set('name1', '1111');
  2. $obj_cluster->set('name2', '2222');
  3. $obj_cluster->set('name3', '333');
  4. $name1 = $obj_cluster->get('name1');
  5. $name2 = $obj_cluster->get('name2');
  6. $name3 = $obj_cluster->get('name3');
  7. var_dump($name1, $name2, $name3);die;

 
  
  1. string(4) "1111"
  2. string(4) "2222"
  3. string(3) "333"

, 。 , 。

redis cluster , name1name2name3  3 key , , 3 slot , 3 。

 
  
  1. redis-cli -h 192.168.33.13 -p 7009 -c
  2. 192.168.33.13:7009> get name1
  3. -> Redirected to slot [12933] located at 192.168.33.13:7003
  4. "1111"
  5. 192.168.33.13:7003> get name2
  6. -> Redirected to slot [742] located at 192.168.33.13:7000
  7. "2222"
  8. 192.168.33.13:7000> get name3
  9. -> Redirected to slot [4807] located at 192.168.33.13:7001
  10. "333"
  11. 192.168.33.13:7001>

, php phpredis , 。

phpredis

, :

 
  
  1. // Connect and specify timeout and read_timeout
  2. $obj_cluster = new RedisCluster(
  3. NULL, Array("host:7000", "host:7001", 1.5, 1.5);
  4. );

timeout read_timeout 。 master 。

  • timeout redis , 1.5 , 1.5 false 。

  • read_timeout redis , key , key value , , 1.5 , 1.5 false。

。 :

 
  
  1. $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 , , ???

 
  
  1. $obj_cluster = new RedisCluster(NULL, ['192.168.33.13:7000', 1.5, 1.5]);
  2. $obj_cluster->set('name1', '1111');
  3. $name1 = $obj_cluster->get('name1');
  4. var_dump($name1);
  5. //
  6. string(4) "1111"

。 , 。 。 , , 。

slave , !!!

 
  
  1. //7009 slave
  2. $obj_cluster = new RedisCluster(NULL, ['192.168.33.13:7009', 1.5, 1.5]);
  3. $obj_cluster->set('name1', '4555');
  4. $name1 = $obj_cluster->get('name1');
  5. var_dump($name1);
  6. //
  7. 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

 
  
  1. redis git clone git@github.com:nrk/predis.git
  2. redis cd predis
  3. predis git:(master) git checkout v1.0.3 #
  4. predis git:(84060b9)

OK, test.php , cluster 。

 
  
  1. php
  2. require 'predis/autoload.php';
  3. $servers = [
  4. 'tcp://192.168.33.13:7000',
  5. 'tcp://192.168.33.13:7001',
  6. 'tcp://192.168.33.13:7002',
  7. 'tcp://192.168.33.13:7003',
  8. 'tcp://192.168.33.13:7004',
  9. ];
  10. $options = ['cluster' => 'redis'];
  11. $client = new Predis\Client($servers, $options);
  12. $client->set('name1', '1111111');
  13. $client->set('name2', '2222222');
  14. $client->set('name3', '3333333');
  15. $name1 = $client->get('name1');
  16. $name2 = $client->get('name2');
  17. $name3 = $client->get('name3');
  18. var_dump($name1, $name2, $name3);die;

 
  
  1. redis php test.php
  2. string(7) "1111111"
  3. string(7) "2222222"
  4. string(7) "3333333"

, , , , :

 
  
  1. require 'predis/autoload.php';
  2. $servers = [
  3. 'tcp://192.168.33.13:7000',
  4. ];
  5. $options = ['cluster' => 'redis'];
  6. $client = new Predis\Client($servers, $options);
  7. $client->set('name1', '1111111');

 
  
  1. $client->hset('name77', 'name', 'yang');
  2. $b = $client->hget('name77', 'name');
  3. ...
  4. ...

, redis 。