首页 > Web开发 > 详细

phpredis -- redis array

时间:2015-12-09 13:26:51      阅读:1182      评论:0      收藏:0      [点我收藏+]

Redis Arrays

一个Redis的数组中键以某种方式相关的一个孤立的命名空间。键被分布在多个Redis的实例,使用一致的散列。哈希函数用于分布在阵列的钥匙,以保持均匀分布。这个特性的加入是一个慷慨的赞助商帮助的结果A+E Networks.

数组是由以下内容组成:

  • Redis的主机列表。
  • 一键提取功能,用于散列以便在关键的一部分,在同一节点(可选)在分发相关的密钥。这是由“功能”的选项设置。
  • 以前在环的节点列表中,节点后才目前已被添加或删除。当读命令被发送到阵列(例如,GET,LRANGE ...),关键是首先在主环queryied,然后在二级环,如果它在主要的一个没有被发现。或者,该键可以自动迁移时发生这种情况。写命令会经常去主环。这是由“前一个”选项设置。
  • 在每一个节点的Redis集,用于当节点被添加或删除迁移密钥的形式的可选索引; 在“索引”选项设置。
  • 一个选项来自动老调重弹的数组作为节点添加或删除,由“autorehash”选项设置。

创建一个数组

有建立的Redis阵列的多种方式; 它们可以被预先定义在redis.ini使用新RedisArray(字符串$名);或使用动态创建新RedisArray(数组$主机,数组$选项);

声明新阵列节点的列表

$ra = new RedisArray(array("host1", "host2:63792", "host2:6380"));

声明新阵列节点列表和一个函数来提取密钥的一部分

function extract_key_part($k) {
    return substr($k, 0, 3);    // hash only on first 3 characters.
}
$ra = new RedisArray(array("host1", "host2:63792", "host2:6380"), array("function" => "extract_key_part"));

定义“以前的”阵列时,节点被添加或删除。

当一个新的节点添加到一个数组,phpredis需要了解它。节点的旧列表变成“前面的”数组,和节点的新列表作为主环。一个节点已添加权后,一些读命令将指向错误的节点和将需要查找钥匙在先前环。

// adding host3 to a ring containing host1 and host2. Read commands will look in the previous ring if the data is not found in the main ring.
$ra = new RedisArray(array("host1", "host2", "host3"), array("previous" => array("host1", "host2")));

指定“retry_interval的”参数

retry_interval的用于指定的重新连接尝试之间毫秒的延迟情况下,客户失去与服务器连接

$ra = new RedisArray(array("host1", "host2:63792", "host2:6380"), array("retry_timeout" => 100)));

指定“lazy_connect”参数

当一个集群里有很多碎片,但不是他们的必然是使用一次此选项很有用。

$ra = new RedisArray(array("host1", "host2:63792", "host2:6380"), array("retry_timeout" => 100)));

在Redis.ini定义数组

由于php.ini中的参数必须预先定义,Redis的数组都必须共享相同的.ini设置。

//列表中可用的Redis阵列
ini_set(‘redis.array.names‘,‘用户,朋友‘);

//为每个阵列组的主机名。
ini_set(‘redis.arrays.hosts‘, ‘users[]=localhost:6379&users[]=localhost:6380&users[]=localhost:6381&users[]=localhost:6382&friends[]=localhost‘);

//设置功能
ini_set(‘redis.arrays.functions‘,‘用户= user_hash‘);

仅供网友//使用索引
ini_set(‘redis.arrays.index‘,‘用户= 1,朋友= 0‘);

用法

Redis的阵列可以使用同样的Redis对象:

$ RA =新RedisArray(“用户”);
$岭 - >设置(“用户1:名称”,“乔”);
$岭 - >设置(“用户2:名称”,“迈克”);

关键散列

默认情况下,为了与其他库兼容,phpredis将尝试找到问题的关键名称中大括号括起来的子串,并用它来分发数据。

例如,键“{用户:1}:名称”和“{用户:1}通过电子邮件将”将被存储在同一台服务器上,因为只有“用户:1”将被散列。您可以在Redis的阵列“功能”选项提供自定义的函数名; 这个函数都会被调用的关键需要被散列的时间。它应该采取一个字符串,并返回一个字符串。

自定义按键分布函数

为了控制键的手工的分布,就可以提供一个自定义功能或关闭,返回服务器号,这是该指数您使用创建的对象RedisArray服务器的阵列中。

例如,实例化一个RedisArray对象新RedisArray(阵列(“美国主机”,“英国主机”,“去主机”),阵列(“分销商”=>“测距”));写一个调用的函数“DIST”将返回2为所有应该结束了“去主机”服务器上的按键。

$ RA =新RedisArray(数组(“主机1”,“主机2”,“host3上”,“主机4”,“主机5”,“host6”,“host7”,“host8”),阵列(“分销商”=>阵列( 2,2)));

此声明,我们开始与2碎片,并转移到4,然后8碎片。初始碎片的数目为2和resharding水平(或迭代次数)为2。

迁移键

当一个节点从环添加或删除,RedisArray实例必须被实例与节点的“上一个”列表中。以一个调用$岭- > _翻版()使所有的钥匙,根据节点的新列表重新分配。传递一个回调函数来_rehash()使得可以跟踪操作的进度:该函数调用的节点名称和数字键将要检查,如_rehash(函数($主机,$计数){。 ..});。

它可以自动完成这一过程,通过设置‘autorehash‘=> TRUE在构造函数中的选项。这将导致需要将它们从先前阵列读取时的键要迁移。

为了迁移按键,它们都必须进行检查和重新处理。如果设置了“索引”选项,每个节点一个密钥列出所有键目前。否则,KEYS命令用于列出它们。如果提供服务器的“先前”列表中,将使用它作为备份环时密钥不能在当前的环中找到。写操作会一 ??直去新环,而读取将进入新的环第一,和第二环作为备份。

添加和/或删除多个实例被支持。

$ RA =新RedisArray(“用户”); //加载了一个新的配置从redis.ini,使用“既往”上市。
$岭 - > _翻版();

运行该代码:

  • 创建一个节点的更新列表中选择一个新的环。
  • 通过服务器服务器,查找在节点的前一个列表中的所有键。
  • 老调重弹每个按键,并可能将其移动到另一台服务器。
  • 更新与节点的新列表数组对象。

多/ EXEC

多/ EXEC仍然可用,但必须在一个节点上运行:

$主机= $岭 - > _目标(“{}用户:用户1:名称”); //找到主机第一
$岭 - >多($主机)//然后在该主机上运行的事务。
   - >德尔(“{}用户:用户1:名称”)
   - >斯雷姆(“{}用户:指数”,“用户1”)
   - > EXEC();

限制

按键阵列采用跨越多个键Redis的命令时,提供任何保证。除了使用MGET,MSET,和DEL的,一个单一的连接将被使用,并读出或写入存在的所有键。在RedisArray对象中运行键()将在每个节点上执行命令和返回键的关联数组,通过主机名进行索引。

阵列信息

RedisArray对象提供了几种方法,以帮助了解群集的状态。这些方法以下划线开头。

  • $ラ- > _主机()→ 返回所选阵列的主机的列表。
  • $ラ- > _函数()→ 返回用于在一致的散列提取关键部位的功能的名称。
  • $ラ- > _目标($键)→ 返回到用于规定密钥的主机。
  • $岭- > _实例($主机)→ 返回连接到特定的节点Redis的实例; 与使用_target得到一个Redis的对象。

运行单元测试

$ CD测试
$ ./mkring.sh启动
$ php的数组tests.php

phpredis -- redis array

原文:http://www.cnblogs.com/thrillerz/p/5032281.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!