开发之前都是用phpredis连接redis服务的,后来随着sentinel和redis cluster的成熟,redis主从都结合sentinel做了高可用,部分数据和并发大的业务使用了redis集群。
相对于phpredis,predis原生支持redis sentinel和redis cluster的连接,当主节点挂掉从节点提升为主节点时客户端会自动发现新的主节点,从而实现redis的高可用。
由于部分phper不知道通过predis连接sentinel和cluster,特意看了一个predis的文档,写了两个demo:
predis连接redis cluster: 连集群的时候可以只配置一个节点或者部分节点的信息,因为这里的配置是为了发现集群中的节点的,只要有一个能连上都能成功发现整个集群的节点,但是为了不建议只配置一个节点。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<?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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?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
本文转自 emma_cql 51CTO博客,原文链接:http://blog.51cto.com/chenql/1958910