高并发, 通常考虑使用缓存来解决问题. 可是缓存也是有极限的, 因此, 即使使用的Redis, 一样会遇到瓶颈和问题.本文就在研究解决问题的一种方法, 基于Java来实现Redis的灵牌桶, 阻塞过多的请求.
了解解决问题的方法, 首先需要知道Redis的工作原理和什么是令牌桶算法.
Redis: 基于内存或者持久化的日志, key/value结构的数据库. Value支持类型: String, Hash, List, , sorted sets.支持多种语言, 本文主要以Java为例.
令牌桶算法: Token Bucket, 随着时间的流逝, 系统会按恒定的1/QPS时间间隔(如果QPS=100,则时间间隔是10ms) 往桶里加入Token(就像有个水龙头在不停的往桶里加水). 如果桶满了, 就停止加水. 每当新的请求来临时, 会各自拿走一个Token, 如果没有Token可以拿了, 就阻塞或者拒绝服务. 如下图: