開發之前都是用phpredis連接配接redis服務的,後來随着sentinel和redis cluster的成熟,redis主從都結合sentinel做了高可用,部分資料和并發大的業務使用了redis叢集。
相對于phpredis,predis原生支援redis sentinel和redis cluster的連接配接,當主節點挂掉從節點提升為主節點時用戶端會自動發現新的主節點,進而實作redis的高可用。
由于部分phper不知道通過predis連接配接sentinel和cluster,特意看了一個predis的文檔,寫了兩個demo:
predis連接配接redis cluster: 連叢集的時候可以隻配置一個節點或者部分節點的資訊,因為這裡的配置是為了發現叢集中的節點的,隻要有一個能連上都能成功發現整個叢集的節點,但是為了不建議隻配置一個節點。
<code><?php</code>
<code> </code><code>require</code> <code>'predis/autoload.php'</code><code>;</code>
<code> </code><code>$servers</code> <code>= </code><code>array</code><code>(</code>
<code> </code><code>'tcp://127.0.0.1:6479'</code><code>,</code>
<code> </code><code>'tcp://127.0.0.1:6480'</code><code>,</code>
<code> </code><code>'tcp://127.0.0.1:6481'</code><code>,</code>
<code> </code><code>'tcp://127.0.0.1:6482'</code><code>,</code>
<code> </code><code>'tcp://127.0.0.1:6483'</code><code>,</code>
<code> </code><code>'tcp://127.0.0.1:6484'</code><code>,</code>
<code> </code><code>);</code>
<code> </code><code>$options</code> <code>= </code><code>array</code><code>(</code><code>'cluster'</code> <code>=> </code><code>'redis'</code><code>);</code>
<code> </code><code>$client</code> <code>= </code><code>new</code> <code>Predis\Client(</code><code>$servers</code><code>, </code><code>$options</code><code>);</code>
<code> </code><code>$i</code><code>=0;</code>
<code> </code><code>for</code><code>(</code><code>$i</code><code>=0;</code><code>$i</code><code><100000;</code><code>$i</code><code>++){</code>
<code> </code><code>try</code>
<code> </code><code>{</code>
<code> </code><code>$client</code><code>->set(</code><code>$i</code><code>, </code><code>"test"</code><code>.</code><code>$i</code><code>);</code>
<code> </code><code>$result</code> <code>= </code><code>$client</code><code>->get(</code><code>$i</code><code>);</code>
<code> </code><code>echo</code> <code>date</code><code>(</code><code>'y-m-d h:i:s'</code><code>,time());</code>
<code> </code><code>echo</code> <code>" "</code><code>.</code><code>$result</code><code>.</code><code>"\n"</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>catch</code><code>(Exception </code><code>$e</code><code>)</code>
<code> </code><code>echo</code> <code>" "</code><code>.</code><code>'Message: '</code> <code>.</code><code>$e</code><code>->getMessage().</code><code>"\n"</code><code>;</code>
<code> </code><code>sleep(1);</code>
<code> </code><code>}</code>
<code>?></code>
predis連接配接redis sentinel:
<code> </code><code>$sentinels</code> <code>= [</code><code>'tcp://127.0.0.1:6380'</code><code>, </code><code>'tcp://10.60.40.233:6380'</code><code>, </code><code>'tcp://10.60.40.222:6379'</code><code>];</code>
<code> </code><code>$options</code> <code>= [</code><code>'replication'</code> <code>=> </code><code>'sentinel'</code><code>, </code><code>'service'</code> <code>=> </code><code>'master1'</code><code>];</code>
<code> </code><code>$client</code> <code>= </code><code>new</code> <code>Predis\Client(</code><code>$sentinels</code><code>, </code><code>$options</code><code>);</code>
<code> </code><code>date_default_timezone_set(</code><code>'Asia/Shanghai'</code><code>);</code>
<code> </code><code>$client</code><code>->set(</code><code>$i</code><code>, </code><code>"test"</code><code>.</code><code>$i</code><code>);</code>
<code> </code><code>$result</code> <code>= </code><code>$client</code><code>->get(</code><code>$i</code><code>);</code>
<code> </code><code>echo</code> <code>date</code><code>(</code><code>'y-m-d h:i:s'</code><code>,time());</code>
<code> </code><code>echo</code> <code>" "</code><code>.</code><code>$result</code><code>.</code><code>"\n"</code><code>;</code>
<code> </code><code>sleep (1);</code>
本文轉自 emma_cql 51CTO部落格,原文連結:http://blog.51cto.com/chenql/1958910