RedisCli.php 4.0 KB
<?php

namespace jiaoyin;

use Swoole\Database\RedisConfig;
use Swoole\Database\RedisPool;

class RedisCli
{
    private $pool;
    public $subRedis = null;
    public function __construct($host, $port, $password, $dbIndex, $num = 20)
    {
        $this->pool = new RedisPool((new RedisConfig)
                ->withHost($host)
                ->withPort($port)
                ->withAuth($password)
                ->withDbIndex($dbIndex),
            $num //默认64个连接池
        );
    }
    //集合存数据
    public  function sAdd($key, $member)
    {
        $redis = $this->pool->get();
        try {
            $res = $redis->sAdd($key, $member);
        } catch (\RedisException $e) {
            return false;
        }
        $this->pool->put($redis);
        return $res;
    }

    //获取集合
    public  function sMembers($key)
    {
        $redis = $this->pool->get();
        try {
            $res = $redis->sMembers($key);
        } catch (\RedisException $e) {
            return false;
        }
        $this->pool->put($redis);
        return $res;
    }

    //移除集合成员
    public  function sRem($key, $member)
    {
        $redis = $this->pool->get();
        try {
            $res = $redis->sRem($key, $member);
        } catch (\RedisException $e) {
            return false;
        }

        $this->pool->put($redis);
        return $res;
    }

    //哈希 键 字段 值 设置
    public function hSet($key, $field, $value)
    {
        $redis = $this->pool->get();
        try {
            $res = $redis->hSet($key, $field, $value);
        } catch (\RedisException $e) {
            return false;
        }
        $this->pool->put($redis);
        return $res;
    }
    //获取 键对应字段的值
    public function hGet($key, $field)
    {
        $redis = $this->pool->get();
        try {
            $res = $redis->hGet($key, $field);
        } catch (\RedisException $e) {
            return false;
        }
        $this->pool->put($redis);
        return $res;
    }
    //获取键所有字段和值
    public function hGetAll($key)
    {
        $redis = $this->pool->get();
        try {
            $res = $redis->hGetAll($key);
        } catch (\RedisException $e) {
            return false;
        }
        $this->pool->put($redis);
        return $res;
    }
    //删除一个值
    public function hDel($key, $field)
    {
        $redis = $this->pool->get();
        try {
            $res = $redis->hDel($key, $field);
        } catch (\RedisException $e) {
            return false;
        }
        $this->pool->put($redis);
        return $res;
    }

    /*
     * 发布订阅等
     */
    //将信息发送到指定的频道
    public function publish($channel, $message)
    {
        $redis = $this->pool->get();
        try {
            $res = $redis->publish($channel, $message);
        } catch (\RedisException $e) {
            return false;
        }
        $this->pool->put($redis);
        return $res;
    }

    public function subscribe($channels, callable $onMessage)
    {
        $redis = $this->pool->get();
        $this->subRedis = $redis;
        try {
            $res = $redis->subscribe($channels, function ($redis, $channel, $message) use ($onMessage) {
                call_user_func($onMessage, $redis, $channel, $message);
            });
        } catch (\RedisException $e) {
            return false;
        }
        $this->subRedis = null;
        $this->pool->put($redis);
        return $res;
    }

    public function psubscribe($channels, callable $onMessage)
    {
        $redis = $this->pool->get();
        $this->subRedis = $redis;
        try {
            $res = $redis->psubscribe($channels, function ($redis, $pattern, $channel, $message) use ($onMessage) {
                call_user_func($onMessage, $pattern, $redis, $channel, $message);
            });
        } catch (\RedisException $e) {
            return false;
        }
        $this->subRedis = null;
        $this->pool->put($redis);
        return $res;
    }
}