Skip to content
gqlxj1987's Blog
Go back

redis集群下key的一些策略

Edit page
压测client压测server线程/进程最大qpscommandargs是否pipeline集群是否指定slot
tencent-recom-center01cluster20522mget100nn
tencent-recom-center01tencent-recom-redis02207200mget700nn
tencent-recom-center01tencent-recom-redis02201418lrange100nn
tencent-recom-center01tencent-recom-redis022011435lrange100nn
tencent-recom-center01tencent-recom-redis022011295lrange100yn
tencent-recom-center01cluster4012300lrange100nn
tencent-recom-center01cluster4015354lrange100yn
tencent-recom-center01cluster4012378lrange100ny
tencent-recom-center01cluster4013618lrange100yy

测试主要集中在mget以及lrange部分

mget部分

对于mget命令,在集群执行时,相比对单点redis执行,会增加了拆分成get的多次网络连接成本,因此效率会大大降低。解决方案是将需要再同一条mget命令出现的key写在同一个slot上,这样的话jedis客户端会将mget保留并传给对应的redis node,而不是拆分成多个get

关于slot的使用

因此对于需要mget的key需要手动分配到同一个slot上,官方给出的具体方式是使用{}将需要hash计算的部分扩起来,这样只要{} 内包含的字段一样的key,都会被分配到同一个slot上,例如下面这三条会被分配到同一个slot上

{recom:item_123:i2i}:xxxxxxxxxxxxx
{recom:item_123:i2i}:qqqqqqqqqqqqq
{recom:item_123:i2i}:fffffffffffff

扩起来的话,具体的写法是什么样的?

CLUSTER KEYSLOT "{lewis1}5400"       #查看key存在于哪个slot上
 
(integer) 938
 
CLUSTER KEYSLOT "{lewis1}421"        #括号部分内容一样的key会被hash到同一个slot上
 
(integer) 938

这样写的情况下,手动指定的情况下,与codis的区别是?


Edit page
Share this post on:

Previous Post
sofa ark
Next Post
Spring Boot Actuator