面试题答案
一键面试- 实现思路:
- 使用Redis的有序集合(Sorted Set)数据结构来记录请求的时间戳。
- 每来一个请求,将当前时间戳(精确到毫秒等合适精度)作为分数,一个唯一标识(如请求ID等)作为成员添加到有序集合中。
- 当请求到达时,首先计算窗口边界,即当前时间往前推1分钟。
- 然后根据窗口边界,从有序集合中移除早于窗口开始时间的记录。
- 最后统计有序集合中的元素个数,若小于等于100,则允许请求通过,否则限流。
- 可能用到的Redis命令:
- ZADD:用于将当前请求时间戳和唯一标识添加到有序集合中。例如:
ZADD key score member
,这里key
是有序集合的键,score
是当前请求时间戳,member
是请求的唯一标识。 - ZREMRANGEBYSCORE:用于移除有序集合中早于窗口开始时间的记录。命令格式为:
ZREMRANGEBYSCORE key min max
,其中min
为负无穷,max
为窗口开始时间的时间戳。 - ZCARD:用于统计有序集合中的元素个数。命令为:
ZCARD key
,返回有序集合key
中的元素数量,以此判断是否超过限流次数。
- ZADD:用于将当前请求时间戳和唯一标识添加到有序集合中。例如: