in phpredis 4.3.0, close() può chiudere la connessione creata da pconnect(). se utilizzi il metodo redis dopo close(), verrà creata automaticamente una nuova connessione persistente.
Stai chiamando pconnect con un timeout? Supponendo che la connessione venga chiusa ogni volta che il timeout viene superato, puoi risolvere nuovamente il master prima di chiamare nuovamente pconnect con un indirizzo diverso.
Se stai eseguendo un cluster Redis, PHPRedis ha una modalità cluster con comportamento di timeout specifico per questa configurazione con supporto per la risposta 'MOVED':https://github.com/phpredis/phpredis/blob/develop/cluster.markdown#timeout
I flussi persistenti sono forniti dagli interni di PHP, è una legge non scritta che qualsiasi cosa esponga un modo per creare un flusso persistente dovrebbe anche fornire un modo per distruggerlo.
PHP Redis infrange quella legge, semplicemente non c'è modo per te di distruggere quel flusso persistente da userland.
Il corso dell'azione dovrebbe essere quello di PR un'implementazione del metodo richiesto.
Ecco una patch per il ramo PHP7 che implementa Redis::pclose:https://gist.github.com/krakjoe/326eadc61bea38fdd6e6
Nota che il codice per pdisconnect è basato sulla disconnessione esistente, entrambe queste funzioni mi sembrano strane e non sono oneste riguardo al loro valore di ritorno. Presumo che ci siano alcuni test o codice da qualche parte che si basano su quella stranezza, quindi non ho tentato di risolverlo.
Qualsiasi PR dovrebbe menzionare che queste funzioni sembrano strane e PHP7 è il momento perfetto per rompere le cose.