大厂面试---Redis面试题(含答案,相关知识点,面试考察次数统计)
大厂面试问答题汇总分析---数据库(索引-聚集/非聚集,事务,mySql, 锁)
目录
1、如何进行限流?
限流的【本质】是为了不断地削减请求的数量
1-1、合法性限流
区分【正常用户】 与【机器人/刷单用户】,通过验证码的方式(还可以拉长用户的访问时间);通过IP的方式,某个IP下的下单频率在毫秒级别 = 判定为不合法用户,还有一种方法是,隐藏秒杀入口地址。
作弊的手段:进攻与防守
1)同一个账号,一次性发出多个请求,应对方案:一个账号只允许接受1个请求。具体做法:通过Redis内存缓存服务,写入一个标志位(只允许1个请求写成功,结合watch的乐观锁的特性),成功写入的则可以继续参加。
2)多个账号【僵尸粉】,一次性发送多个请求,通过检测指定机器IP请求频率,如果发现某个IP请求频率很高,可以给它弹出一个验证码或者直接禁止它的请求
- 1-弹出验证码,最核心的追求,就是分辨出真实用户
- 2-直接禁止IP,实际上是有些粗暴的,因为有些真实用户的网络场景恰好是同一出口IP的,可能会有“误伤“
3)多个账号,不同IP发送不同请求
- 跟真实用户区别不大,容易【误伤】
- 通过设置业务门槛高来限制这种请求了
- 通过账号行为的”数据挖掘“来提前清理掉它们
- 【僵尸账户】账号很可能属于同一个号码段甚至是连号的,活跃度不高等级低,资料不全等
1-2、基于负载限流
软负载限流:
集群: 工具,Nginx(第七层-应用层) 和 LVS(第四层-传输层)
[Nginx 是一个高性能的HTTP和反向代理web服务器 ]
级联负载: 级联的做法也会同时增加请求的路径
<