使用JedisCluster写入Redis群集中的分区

时间:2016-06-02 01:52:16

标签: redis partitioning jedis redis-cluster

我有一个Redis群集。我正在使用JedisCluster客户端连接到我的Redis。

我的应用程序有点复杂,我想基本上控制应用程序中的哪些分区数据。例如,我的应用程序由子模块A,B,C组成。然后,我希望子模块A中的所有数据都应该转到分区1。类似地,来自子模块B的数据应该例如转到分区2,依此类推。

我正在使用JedisCluster,但我没有找到任何API来写入我的群集上的特定分区。我假设我将在所有Redis节点上拥有相同的分区名称,并处理哪些数据将自动处理哪个节点,但我将处理哪个分区。

我尝试了

JedisCluster lib

https://github.com/xetorthio/jedis/blob/b03d4231f4412c67063e356a7c3acf9bb7e62534/src/main/java/redis/clients/jedis/JedisCluster.java

但找不到任何东西。请帮忙? 在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这不是Redis Cluster的工作方式。使用Redis群集,每个节点(分区)都有一组已定义的密钥(插槽),它正在处理。将密钥写入未由主服务器提供服务的主节点会导致拒绝该命令。

来自Redis Cluster Spec

  

Redis Cluster实现了一个名为哈希标记的概念,可用于强制某些密钥存储在同一节点中。

     

[...]

     

密钥空间分为16384个槽,有效地设置了16384个主节点的簇大小的上限(但建议的最大节点大小约为1000个节点)。   集群中的每个主节点处理16384个散列插槽的子集。

您需要在群集配置级别定义哪个主节点专门为特定插槽或一组插槽提供服务。配置导致数据本地化。

根据密钥计算广告位。好消息是,您可以使用Key hash tags

强制执行密钥的特定插槽
  

计算用于实现哈希标记的哈希槽时有一个例外。散列标记是一种确保在同一散列槽中分配多个密钥的方法。这用于在Redis群集中实现多键操作。

示例:

{user1000}.following

{…}之间的内容用于计算广告位。密钥哈希标记允许您在特定节点上对密钥进行分组,并在使用任意哈希标记时强制执行相同的数据位置。

您还可以使用映射到广告位的已知哈希标记更进一步(您需要预先计算表格或查看this Gist)。通过使用映射到特定插槽的已知哈希标记,您可以选择插槽,从而选择数据所在的主节点。

其他所有内容都由您的Redis客户端处理。