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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?