面试题答案
一键面试过期数据清理基本原理
在Redis滑动窗口限流场景中,过期数据清理主要依赖Redis的过期键自动删除机制。当设置了键的过期时间后,Redis内部会维护一个过期字典,记录每个键的过期时间。在每次执行写命令或定期删除任务时,Redis会检查部分过期键,并删除已过期的键。同时,客户端在访问键时,如果发现键已过期,也会触发删除操作。
常用数据结构及命令
- 数据结构:
- 有序集合(Sorted Set):可以用来记录请求的时间戳,每个成员是时间戳,分值也可以设置为时间戳,这样可以方便地根据时间范围筛选出在滑动窗口内的请求。
- 字符串(String):可用于记录当前窗口内的请求计数等简单信息。
- 命令:
- ZADD:用于向有序集合中添加成员及其分值,例如
ZADD key score member
,在限流场景中可以用来记录请求的时间戳。 - ZREMRANGEBYSCORE:用于删除有序集合中指定分值范围内的成员,在滑动窗口限流中,可通过它删除滑动窗口之外过期的时间戳记录,比如
ZREMRANGEBYSCORE key min max
,其中min
和max
是根据滑动窗口计算出来的时间戳边界值。 - GET/SET/INCR:用于字符串类型操作。
INCR
可实现对请求计数的原子性增加,GET
用于获取当前计数,SET
可用于初始化计数等操作。
- ZADD:用于向有序集合中添加成员及其分值,例如