上面,完成了防止超卖商品和抢购接口的限流,已经能够防止大流量把我们的服务器直接搞炸,要开始关心一些细节问题。现在设计的系统还有一些问题:我们应该在一定的时间内执行秒杀处理,不能再任意时间都接受秒杀请求。如何加入时间验证?对于稍微懂点电脑的,又会动歪脑筋的人来说开始通过抓包方式获取我们的接口地址。然后通过脚本进行抢购怎么办?秒杀开始之后如何限制单个用户的请求频率,即单位时间内限制访问次数?
限时抢购实现
使用redis来记录秒杀时间,,对秒杀过期的请求进行拒绝处理!!
一般在真实环境中,都会通过定时任务,在秒杀获取开始的前,将数据库中要秒杀的商品添加到redis中,下面我们手动模拟
这里我们使用String类型以kill+商品id作为key以商品id作为value,设置180秒超时(可随意设置时间)120.0.1:6379>setkill11EX180
抢购中加入时间控制整合当前项目操作redis服务,这里使用spring-boot-starter-data-redis操作redis,引入依赖
org.springframework.boot
spring-boot-starter-data-redis
修改yml配置
通过redis控制抢购超时的请求
秒杀接口隐藏
每次点击秒杀按钮,先从服务器获取一个秒杀验证值。Redis以缓存用户ID和商品ID为Key,秒杀地址为Value缓存验证值用户请求秒杀商品的时候,要带上秒杀验证值进行校验。
这样可以起到一定的作用
单用户次数限制
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点