略难的题,在中高级岗位比较常见,校招和初级不太常见。
这个题目本质上就是问热点问题,你可以结合数据倾斜的内容来回答。实际上,你能答出重新设计 key 结构、手动哈希、拆分大 key 就能赢得竞争优势了。
这个问题和 怎么解决 Redis 中数据倾斜的问题? (meoying.com) 非常类似,但是有一个区别:数据倾斜大概率造成 QPS 极高,但是 QPS 极高并不一定源自数据倾斜。举个例子来说,一个节点上可能并没有多少数据,但是因为这个节点上放了一些热点数据,导致它的 QPS 极高。
所以在这个问题之下,你就要在解决数据倾斜问题的解决思路基础上,增加额外的解决思路。
第一个思路是增加本地缓存。也就是说通过本地缓存来挡住大部分的热点流量。
第二个思路就是引入 pipeline 或者批量操作,但是这个要看业务场景是否支持。比如说有一些 QPS 是因为同事写的垃圾代码,如:
for i < 10000 {
redis.Get("key"+i)
}
这种就是可以考虑使用 pipeline 和批量操作来优化的,效果很好。
这个问题等价于: