Skip to the content.

首页

Guava


RateLimiter

SmoothRateLimiter

限流算法的对比

RedissonRateLimiter

使用滑动窗口限流方式,使用String记录可用令牌数,使用Zset记录请求,每次获取令牌时使用Zrangebyscore命令查出滑动窗口外的请求并删除,同时恢复令牌数量。


BloomFilter

以时间换空间,使用了双重散列的探查方式,只做了一次hash计算,将低位视为hash1,高位视为hash2,计算公式为:

(hash1 + i * hash2) % TABLE_SIZE。

RedissonBloomFilter

基于redis的bitmap数据类型实现,原理与Guava BloomFilter相同。

计数布隆过滤器

改为使用数组统计每个槽位被命中的次数,可以删除元素,只需把计数减1即可,缺点就是空间占用大大增加。

布谷鸟哈希

通过多个哈希函数计算出多个位置,将元素放置到任一位置的空置席位上,如果不存在空置席位则挤走某个元素,被挤走的元素,继续按此方式落位到一个新的空置席位上,直到所有元素均落位成功,或该挤兑行为重复次数达到一定阈值后触发扩容,扩容行为与hashmap相似。

布谷鸟过滤器

每个位置上设置4个席位,席位上存储的是指纹信息,只使用两个哈希函数,第二个哈希值由指纹和第一个哈希值计算得出。


EventBus


Striped

细粒度锁,用于并发场景下创建锁对象。


Monitor

对象监视器,用于替代ReentrantLock。