我在群集模式下使用Redis(6个节点,3个主服务器和3个从服务器),我正在使用SE.Redis,但是,不支持在不同散列插槽中使用多个密钥的命令
所以我使用HashTags确保某个键属于使用{}
的特定哈希槽。例如,我有2个键,如cacheItem:{1}
,cacheItem:{94770}
我使用(每个键在单独的请求中)设置这些键:
SEclient.Database.StringSet(key,value)
这很好用,
但现在我想查询属于多个哈希槽的key1和key2
SEclient.Database.StringGet(redisKeys);
上面的将失败并抛出异常,因为这些密钥属于多个散列槽
在查询密钥时,我无法确保我的密钥属于同一个哈希槽, 这个例子只有2个键,我有数百个键,我想查询。
所以我有以下问题:
如何在多个密钥属于不同的哈希槽时查询多个密钥? 这样做的最佳做法是什么?
我应该在我这边计算散列槽,然后在每个散列槽中发送单独的请求吗?
我可以在我的场景中使用TwemProxy吗?
任何帮助高度赞赏
答案 0 :(得分:1)
我无法与SE.Redis通话,但您的路线正确。您要么需要:
进行预先计算需要您(或您的客户)预先了解集群拓扑(哈希插槽所有者)和Redis密钥哈希方法(不用担心,它很简单并且有据可查)。
HASH_SLOT=CRC16 (key) mod 16384
。到处搜索,您可以找到适用于任何语言的代码?请记住,使用哈希标签会使此操作更加复杂!另请参阅:https://redis.io/commands/cluster-keyslot 某些Redis群集客户端会通过内部魔术(例如Java中的生菜)为您完成此操作,但是它们创建的方式并不完全相同
还请注意,群集拓扑基本上可以随时更改,并且上述工作很复杂。为持久起见,如果您遇到跨槽错误,则需要重试。或者,您可以对单个键进行多次请求,因为维护起来要简单得多。