PredisConnector.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace Illuminate\Redis\Connectors;
  3. use Illuminate\Contracts\Redis\Connector;
  4. use Illuminate\Redis\Connections\PredisClusterConnection;
  5. use Illuminate\Redis\Connections\PredisConnection;
  6. use Illuminate\Support\Arr;
  7. use Illuminate\Support\Str;
  8. use Predis\Client;
  9. class PredisConnector implements Connector
  10. {
  11. /**
  12. * Create a new connection.
  13. *
  14. * @param array $config
  15. * @param array $options
  16. * @return \Illuminate\Redis\Connections\PredisConnection
  17. */
  18. public function connect(array $config, array $options)
  19. {
  20. $formattedOptions = array_merge(
  21. ['timeout' => 10.0], $options, Arr::pull($config, 'options', [])
  22. );
  23. if (isset($config['prefix'])) {
  24. $formattedOptions['prefix'] = $config['prefix'];
  25. }
  26. if (isset($config['host']) && str_starts_with($config['host'], 'tls://')) {
  27. $config['scheme'] = 'tls';
  28. $config['host'] = Str::after($config['host'], 'tls://');
  29. }
  30. return new PredisConnection(new Client($config, $formattedOptions));
  31. }
  32. /**
  33. * Create a new clustered Predis connection.
  34. *
  35. * @param array $config
  36. * @param array $clusterOptions
  37. * @param array $options
  38. * @return \Illuminate\Redis\Connections\PredisClusterConnection
  39. */
  40. public function connectToCluster(array $config, array $clusterOptions, array $options)
  41. {
  42. $clusterSpecificOptions = Arr::pull($config, 'options', []);
  43. if (isset($config['prefix'])) {
  44. $clusterSpecificOptions['prefix'] = $config['prefix'];
  45. }
  46. return new PredisClusterConnection(new Client(array_values($config), array_merge(
  47. $options, $clusterOptions, $clusterSpecificOptions
  48. )));
  49. }
  50. }