随笔 - 171  文章 - 0  评论 - 0  阅读 - 62142

Redis HashTag

hashTag用于redis集群中。其实现方式为在key中加个{},例如test{1}。使用hash tag后客户端在计算key的crc16时,只计算{}中数据。如果没使用hash tag,客户端会对整个key进行crc16计算。下面演示下hash tag使用。

127.0.0.1:6380> cluster keyslot user:case
(integer) 9491
127.0.0.1:6380> cluster keyslot user:case{1}
(integer) 9842
127.0.0.1:6380> cluster keyslot user:info
(integer) 15429
127.0.0.1:6380> cluster keyslot user:info{1}
(integer) 9842

通过以上代码可以看到,不使用hash tag 对应的hash slot是不同的,使用后则会对应到一个hash slot中

 优点

hash tag主要作用是将某一固定特征数据存储到一台实例上,避免逐个查询集群中实例。例如将用户信息与用户订单数量存储到一个实例用于后续展示统计。

redis的pipline、lua命令涉及到的key都必须是同一个slot,否则会报错"command keys must in same slot"。

将用户id为1的相关信息存储在6380实例
127.0.0.1:6380> set user:info{1} 基本信息
OK
127.0.0.1:6380> set user:order{1} 2
OK
127.0.0.1:6380> keys *
1) "user:order{1}"
2) "user:info{1}"

缺点

可能会导致数据集中在一个实例中,造成数据倾斜,例如将用户1-10000的数据存储在一个实例中。

如果只有1-10000的用户有订单信息,那么相当于所有信息都存储在了6380这台实例中
127.0.0.1:6380> set user:1:order{1-10000} 2
OK
127.0.0.1:6380> set user:2:order{1-10000} 2
OK
127.0.0.1:6380> set user:3:order{1-10000} 2
OK

posted on   zhengbiyu  阅读(1080)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示