1.首先先介紹下connect和pconnect的區別。
connect:腳本結束之后連接就釋放了。
2.pconnect:腳本結束之后連接不釋放,連接保持在php-fpm進程中。
所以使用pconnect代替connect,可以減少頻繁建立redis連接的消耗。
redis手冊中的介紹
-
connect, open
-
Description
Connects to a Redis instance. 連接到一個Redis實例
-
Parameters
host: string. can be a host, or the path to a unix domain socket host:字符串類型可以使一個HOST IP或者是一個UNIX DOMAIN SOCKET的路徑
port: int, optional port:整數型,Redis的運行端口
timeout: float, value in seconds (optional, default is 0 meaning unlimited) timeout:浮點型,連接的市場,單位是秒,默認為0即連接沒有時間限制
-
Return Value
BOOL: TRUE on success, FALSE on error.
-
Example
$redis->connect('127.0.0.1', 6379); $redis->connect('127.0.0.1'); // port 6379 by default $redis->connect('127.0.0.1', 6379, 2.5); // 2.5 sec timeout. $redis->connect('/tmp/redis.sock'); // unix domain socket.
|
|
-
pconnect, popen
-
Description
Connects to a Redis instance or reuse a connection already established with pconnect/popen.
pconnect/popen用於連接一個Redis的實例或者復用一個已經存在的實例。 The connection will not be closed on close or end of request until the php process ends. So be patient on to many open FD's (specially on redis server side) when using persistent connections on many servers connecting to one redis server. 這個連接將不會被主動關閉,比如使用close(),或者PHP執行結束這個連接都不會被主動關閉。當有大量的connect請求在redis服務器端時,使用持久化的連接對象。 Also more than one persistent connection can be made identified by either host + port + timeout or host + persistent_id or unix socket + timeout. 一個持久化的連接實例,可以使用HOST+PORT+TIMEOUT或者HOST+persistent_id或者SOCKET+TIMEOUT的方式創建。 This feature is not available in threaded versions. pconnect and popen then working like their non persistent equivalents. pconnect函數和popen函數在線程版本中不能被使用。
-
Parameters
host: string. can be a host, or the path to a unix domain socket port: int, optional timeout: float, value in seconds (optional, default is 0 meaning unlimited) persistent_id: string. identity for the requested persistent connection
-
Return Value
BOOL: TRUE on success, FALSE on error.
-
Example
$redis->pconnect('127.0.0.1', 6379); $redis->pconnect('127.0.0.1'); // port 6379 by default - same connection like before. $redis->pconnect('127.0.0.1', 6379, 2.5); // 2.5 sec timeout and would be another connection than the two before. $redis->pconnect('127.0.0.1', 6379, 2.5, 'x'); // x is sent as persistent_id and would be another connection the the three before. $redis->pconnect('/tmp/redis.sock'); // unix domain socket - would be another connection than the four before.
|