略难的题,在社招中会遇到,一般在中高级岗位中考察较多。
这个问题是包含两层意思:怎么知道有大 key,知道了怎么解决。
回答这个问题,最好就是能引出一个具体的案例,然后借助这个案例来刷亮点。
所谓的大 key,不是指 key 本身很长,而是指值很大,比如说一个巨大的 JSON 串,一个巨大的 zset,list 等。大 key 一般会引起数据倾斜、QPS 倾斜等问题。或者说大 key 有极大的可能是热点 key,并发极高。
在这之前,你可以先看这些问题,它们有些类似,但是又很不同:
大 key 其实就有一个解决方案,分而治之。也就是拆分 key。比如说原本一个 key 对应的 list,放了 100w 数据,那么可以拆成 100 个 key,每个 key 只有 1w 数据。
我就曾经解决过一个大 key 问题,是为了解决大数据、高可用、高性能的榜单问题。
一开始我们业务的数据量不是很大,所以直接用了最简单的 Redis zset 来计算榜单。
后面随着业务的发展,计算这个榜单的数据越来越多,并发量越来越高。这个时候,一个 zset 里面要放几百万个数据,存储这个 zset 的 Redis 并发极高,压力极大。并且 zset 中元素数量太多,导致更新的时候越来越慢。
定时任务;Redis zset;本地缓存;大 key 问题;
zset 分 key,key取局部 100,归并算全局 100,本地缓存查询快;
大数据高并发高可用的榜单解决方案
定时任务;大key 问题;热点问题