1. <?php
    2. $pool = new RedisPool();
    3. $server = new Swoole\Http\Server('0.0.0.0', 9501);
    4. $server->on('Request', function($req, $resp) use ($pool) {
    5. //从连接池中获取一个Redis协程客户端
    6. $redis = $pool->get();
    7. //连接失败
    8. if ($redis === false)
    9. {
    10. $resp->end("ERROR");
    11. return;
    12. }
    13. $result = $redis->get('key');
    14. $resp->end(var_export($result, true));
    15. //释放客户端,其他协程可复用此对象
    16. $pool->put($redis);
    17. });
    18. $server->start();
    19. class RedisPool
    20. {
    21. protected $pool;
    22. function __construct()
    23. {
    24. $this->pool = new SplQueue;
    25. }
    26. function put($redis)
    27. {
    28. $this->pool->push($redis);
    29. }
    30. function get()
    31. {
    32. //有空闲连接
    33. if (count($this->pool) > 0)
    34. {
    35. return $this->pool->pop();
    36. }
    37. //无空闲连接,创建新连接
    38. $redis = new Swoole\Coroutine\Redis();
    39. $res = $redis->connect('127.0.0.1', 6379);
    40. if ($res == false)
    41. {
    42. return false;
    43. }
    44. else
    45. {
    46. return $redis;
    47. }
    48. }
    49. }