perf(security): eliminate fnv.New64a() allocation in SlidingWindowLimiter.getBucket
Same inline FNV-1a optimization as RateLimiter.
This commit is contained in:
parent
bc6bfb5ac3
commit
f7997ab5c4
@ -20,9 +20,10 @@
|
|||||||
package security
|
package security
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"hash/fnv"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"rua.plus/lolly/internal/hash"
|
||||||
)
|
)
|
||||||
|
|
||||||
// limiterBucket 分段锁桶,每个桶持有部分键的计数器。
|
// limiterBucket 分段锁桶,每个桶持有部分键的计数器。
|
||||||
@ -59,9 +60,7 @@ type SlidingWindowLimiter struct {
|
|||||||
// 返回值:
|
// 返回值:
|
||||||
// - *limiterBucket: 对应的桶
|
// - *limiterBucket: 对应的桶
|
||||||
func (s *SlidingWindowLimiter) getBucket(key string) *limiterBucket {
|
func (s *SlidingWindowLimiter) getBucket(key string) *limiterBucket {
|
||||||
h := fnv.New64a()
|
return s.buckets[hash.FNV64a(key)%16]
|
||||||
h.Write([]byte(key))
|
|
||||||
return s.buckets[h.Sum64()%16]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// windowCounter 滑动窗口计数器。
|
// windowCounter 滑动窗口计数器。
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user