这个案例非常适合用在初中级岗位中。
限流是一个热门的话题,Redis 也是一个热门的话题,所以这样一个使用 Redis List 来做限流的案例,你可以同时可以用在限流有关的面试中,也可以用在 Redis 有关的面试中,还可以用在和可用性有关的问题上。
同时,Redis 中还有另外一个也可以用作限流的数据结构 zset,因此你可以将话题在 zset 和 List 中来回跳转。
这个案例采用的是滑动窗口日志限流算法,对应的细节你可以在 什么是滑动窗口日志限流算法? (meoying.com) 中找到。代码在interview-cases/case11_20/case18 at main · meoying/interview-cases (github.com)
使用 Redis 来实现这个算法的时候,实际上有两种数据结构可以使用,这里用的是 List,另外一个选项就是 zset 了。那当然了,从实现的角度上来说,使用 zset 会比较简单一些,但是使用 List 能减少内存使用量。因为 zset 需要保存 score 和元素两个东西,但是 list 只需要保存元素。
整个算法需要借助 lua 脚本来实现,否则会有并发问题,导致限流不准确。