栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

有没有一种方法可以使特定密钥在集群模式下位于特定Redis实例上?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

有没有一种方法可以使特定密钥在集群模式下位于特定Redis实例上?

您可以,但并非不重要。首先,Redis在密钥中使用花括号来确定其分片部分,因此您可以决定修改密钥并将其发送给任意分片。

现在,您需要两件事:

  1. 哪个碎片或插槽范围位于redis实例中的映射。

  2. 一种知道哪个字符串映射到哪个插槽的方法,因此您可以在密钥上强制使用“分片字符串”将其路由到特定的分片。

第一个很简单-

CLUSTER SLOTS
将为您提供该地图,只需对其进行解析即可。

第二个比较棘手-
但幸运的是我已经完成了这项工作。我创建了一个表,该表将最短的字母数字字符串映射到Redis集群中的每个16384插槽。我用C语言编写,但您可以轻松地将其转换为任何内容。https://gist.github.com/dvirsky/93f43277317f629bb06e858946416f7e

因此,给定密钥和所需的节点,您的算法将是:

  1. 查看插槽图,并获取该节点上的插槽范围。

  2. 选择该节点范围内的插槽。

  3. 在分片表中查找该插槽的条目。

  4. 用键上的花括号将字符串拍打。例如转换

    foo
    foo{e4x}

就是这样!使用此键的任何命令都将路由到该分片。

它的伪python版本:

# Build this table from CLUSTER SLOTS or CLUSTER NODESslots = {   '127.0.0.1:7000': [(0, 1045),(2000,2100)]   ... }# Build this table from the C example:sharding_table = ["06S", "Qi", "5L5", "4Iu", "4gY", ....]def retarget_key(key, node):    ranges = slots[node]    sharding_key = shading_table[ranges[0][0]]    return '%s{%s}' % (key, sharding_key)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/370657.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号