我正在尝试通过别名使用 Predis 分片,如 described here .我的代码基本相同,但我只返回空数组。我的哈希键周围需要 {} 吗? (编辑:不,只是试过了)
$api->get("/test", function () {
$servers = [
["alias" => "metadata", "port" => 6380],
["alias" => "relations", "port" => 6381],
["alias" => "dim_provider", "port" => 6382],
["alias" => "dim_revctrcode", "port" => 6383],
["alias" => "dim_enccode", "port" => 6384],
["alias" => "dim_pos", "port" => 6385]
];
$options = [
"nodehash" => function ($connection) { return $connection->getParameters()->alias; },
"cluster" => function ($options) {
$replicas = Predis\Cluster\Distribution\HashRing::DEFAULT_REPLICAS;
$hashring = new Predis\Cluster\Distribution\HashRing($replicas, $options->nodehash);
$cluster = new Predis\Connection\PredisCluster($hashring);
return $cluster;
}
];
$redis = new Predis\Client($servers, $options);
try {
$test = $redis->scard("dim_provider");
print_r($test); // Prints 0 for scard or empty Array for hgetall
} catch (Exception $e) {
print $e->getMessage();
}
$redis = new Predis\Client(["port" => 6382]);
$test = $redis->scard("dim_provider");
print_r($test); // Works.
});
编辑:如果我只将一台服务器放在 $servers
数组中,它也可以工作。因此,散列似乎无法正常工作。当我在 nodehash
中的返回值前面抛出一些 echo 时,我可以看到它正在返回别名。
最佳答案
将 dim_provider
alias 分配给 Redis 连接并尝试从服务器获取名为 dim_provider
的key是两个不同的东西。
在您的脚本中,您尝试使用连接别名(而不是通常的 ip:port
对)设置一个 Redis 实例集群,以计算您的 key 空间在多个 Redis 服务器中的分布你的data shards .使用此设置, key dim_provider
根据底层分布算法进行分片,并且可以存储在组成集群的 6 个服务器中的任何一个上,并在 $servers
数组中定义。
关于php - Predis 别名分片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15166613/