php - Predis 别名分片

标签 php redis predis

我正在尝试通过别名使用 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_providerkey是两个不同的东西。

在您的脚本中,您尝试使用连接别名(而不是通常的 ip:port 对)设置一个 Redis 实例集群,以计算您的 key 空间在多个 Redis 服务器中的分布你的data shards .使用此设置, key dim_provider 根据底层分布算法进行分片,并且可以存储在组成集群的 6 个服务器中的任何一个上,并在 $servers 数组中定义。

关于php - Predis 别名分片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15166613/

相关文章:

php - mysql - 如何为查询结果设置一个值并进行优化

javascript - 如何避免 Node.js & MongoDB & Redis 堆栈中的狗桩效应?

php - 连接拒绝重做

php - 是否可以有两个 Predis 连接到同一 Redis 实例的不同数据库?

php - 如何在php中使用predis删除所有缓存

php - 如何使用 php 从推文中删除除纯文本之外的所有内容?

javascript - 如何使用ajax正确将javascript变量插入mysql数据库

java - Java中解压PHP的gzcompress

c# - stackexchange redis hashscan一次性返回所有字段

c# - Redis内存占用Store和AddToRecentsList