面试题答案
一键面试常见限流维度
- IP 维度:根据请求来源的 IP 地址进行限流,防止单个 IP 频繁访问服务,可通过记录每个 IP 的访问次数,达到阈值后限制访问。
- 用户维度:以用户标识(如用户 ID)为依据,针对每个用户的请求进行限流,避免单个用户对系统资源过度占用。
- 接口维度:对不同的接口分别设置限流规则,不同业务接口可能有不同的承受能力,通过对每个接口的访问次数控制来保障系统整体稳定。
维度组合实现限流策略
以 IP 维度和接口维度组合为例:
- 记录方式:在 Redis 中,可以使用哈希(Hash)数据结构来记录。例如,以接口名称作为哈希表的 key,哈希表的 field 为 IP 地址,value 记录该 IP 对这个接口的访问次数。
- 限流逻辑:每次请求到达时,先根据接口名称和请求 IP 从 Redis 哈希表中获取当前访问次数。如果次数未达到设定的阈值,则允许访问,并将访问次数加 1;若达到或超过阈值,则拒绝访问。可使用 Redis 的
HINCRBY
命令来实现计数操作,通过判断返回值是否超过阈值决定是否限流。