Redis分片集群下数据结构使用不当造成的分流不均问题分析

一.问题描述

项目中使用了一个Redis分片集群,一共设置了5个分片。在观察其监控信息时发现5个分片的访问量极其不均匀。

85%的调用量都集中在分片1上,13%的调用量集中在分片2上,1%的调用量集中在分片3上。另外两个分片的调用量都不到整体的1%。

在这里插入图片描述

二.问题分析

看到这个现象感觉非常奇怪,设置分片的目的是为了将流量均匀地分布到多台机器上以减轻单台机器的压力,提高性能。

目前的情况是大部分流量都集中在一台机器上了,不符合分片集群设置的初衷。

通过排查项目对此Redis集群的使用,发现主要有3处读写Redis的地方,同时每处只涉及一个key的读写。

到这里就基本猜到是怎么回事了:在我们的case中,只有3个key被频繁访问,其它的key访问量
很少。

而每一个key都由固定的分片存储,所以存储这3个key的机器就会接受大部分的请求,造成请求分配均衡。

三.解决方案

(1)方案一:改用主从集群
其实在这个场景下使用分片集群不是很合适。如果改成主从集群,所有key在master和salve上都有存储,就不会有这种分配不均的问题了。

(2)方案二:改用更合适的数据结构
要想发挥分片集群的优势需要尽量地让key均匀地分布到所有的机器上。
通过对上文中提到的3个key的使用进行分析,发现这3个key对应的value都使用了hash结构。

如果我们这样改造:使用字符串代替hash,具体来说使用old_key+hash结构中的key做为新的key,value还是之前hash中的value。

这样就把一个大的hash结构变成了多个key和与之对应的value。理论上就能更均匀地分布Redis中的key,进而解决上述问题。

文章首发于公众号【第四单元】,欢迎关注,一起学习进步
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值