开发之前都是用phpredis连接redis服务的,后来随着sentinel和redis cluster的成熟,redis主从都结合sentinel做了高可用,部分数据和并发大的业务使用了redis集群。
相对于phpredis,predis原生支持redis sentinel和redis cluster的连接,当主节点挂掉从节点提升为主节点时客户端会自动发现新的主节点,从而实现redis的高可用。
由于部分phper不知道通过predis连接sentinel和cluster,特意看了一个predis的文档,写了两个demo:
predis连接redis cluster: 连集群的时候可以只配置一个节点或者部分节点的信息,因为这里的配置是为了发现集群中的节点的,只要有一个能连上都能成功发现整个集群的节点,但是为了不建议只配置一个节点。
<?php
require 'predis/autoload.php';
$servers = array(
'tcp://127.0.0.1:6479',
'tcp://127.0.0.1:6480',
'tcp://127.0.0.1:6481',
'tcp://127.0.0.1:6482',
'tcp://127.0.0.1:6483',
'tcp://127.0.0.1:6484',
);
$options = array('cluster' => 'redis');
$client = new Predis\Client($servers, $options);
$i=0;
for($i=0;$i<100000;$i++){
try
{
$client->set($i, "test".$i);
$result = $client->get($i);
echo date('y-m-d h:i:s',time());
echo " ".$result."\n";
}
catch(Exception $e)
{
echo date('y-m-d h:i:s',time());
echo " ".'Message: ' .$e->getMessage()."\n";
}
sleep(1);
}
?>
predis连接redis sentinel:
<?php
require 'predis/autoload.php';
$sentinels = ['tcp://127.0.0.1:6380', 'tcp://10.60.40.233:6380', 'tcp://10.60.40.222:6379'];
$options = ['replication' => 'sentinel', 'service' => 'master1'];
$client = new Predis\Client($sentinels, $options);
date_default_timezone_set('Asia/Shanghai');
$i=0;
for($i=0;$i<100000;$i++){
$client->set($i, "test".$i);
$result = $client->get($i);
echo date('y-m-d h:i:s',time());
echo " ".$result."\n";
sleep (1);
}
?>
详细用法参考github:https://github.com/nrk/predis
转载于:https://blog.51cto.com/chenql/1958910