laravel使用redis集群,用户redis分配解决办法,以及处理redis集群中的数据

 $host) {
            $redisManage = new \Illuminate\Redis\RedisManager(config('database.redis.client'), [
                'default' => [
                    'host' => $host,
                    'password' => env('REDIS_PASSWORD', null),
                    'port' => env('REDIS_PORT', 6379),
                    'database' => $databases[$index],
                ]
            ]);

            self::$connections[$index] = $redisManage->connection();
        }
    }

    public static function count()
    {
        if (empty(self::$connections)) {
            self::init();
        }

        return count(self::$connections);
    }

    public static function connection($index)
    {
        if (empty(self::$connections)) {
            self::init();
        }

        if (!isset(self::$connections[$index]))
            throw new Exception('未找到redis连接');

        return self::$connections[$index];
    }

    public static function __callStatic($method, $parameters)
    {
        if (empty(self::$connections)) {
            self::init();
        }

        $result = [];
        foreach (self::$connections as $connection) {
            $result[] = $connection->{$method}(...$parameters);
        }

        return $result;
    }
}

这里应该有个全局分配redis的方法,即加密后的int数值整出所有redsi服务器的数量

$index= crc32($openid) % count(explode(',', array($redis_host)));

代码中调用

#$index 指定redis连接键
$hash_set = Redis::connection($index)->hset('hash:key', 1204752,json_encode(['name'=>'小锦鲤']));

使用这个扩展类之后,所有对redis的操作返回都会是一个数组。详细信息自行运行调试。

你可能感兴趣的:(php,redis,laravel)