开发之前都是用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
时间: 2024-10-05 05:32:18