mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2026-01-05 23:35:48 +08:00
提升IP名单性能
This commit is contained in:
@@ -4,7 +4,9 @@ import (
|
||||
"github.com/TeaOSLab/EdgeNode/internal/utils"
|
||||
"github.com/TeaOSLab/EdgeNode/internal/utils/testutils"
|
||||
"github.com/iwind/TeaGo/assert"
|
||||
"math/rand"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
@@ -14,64 +16,64 @@ func TestIPItem_Contains(t *testing.T) {
|
||||
|
||||
{
|
||||
item := &IPItem{
|
||||
IPFrom: utils.IP2Long("192.168.1.100"),
|
||||
IPFrom: utils.IP2LongHash("192.168.1.100"),
|
||||
IPTo: 0,
|
||||
ExpiredAt: 0,
|
||||
}
|
||||
a.IsTrue(item.Contains(utils.IP2Long("192.168.1.100")))
|
||||
a.IsTrue(item.Contains(utils.IP2LongHash("192.168.1.100")))
|
||||
}
|
||||
|
||||
{
|
||||
item := &IPItem{
|
||||
IPFrom: utils.IP2Long("192.168.1.100"),
|
||||
IPFrom: utils.IP2LongHash("192.168.1.100"),
|
||||
IPTo: 0,
|
||||
ExpiredAt: time.Now().Unix() + 1,
|
||||
}
|
||||
a.IsTrue(item.Contains(utils.IP2Long("192.168.1.100")))
|
||||
a.IsTrue(item.Contains(utils.IP2LongHash("192.168.1.100")))
|
||||
}
|
||||
|
||||
{
|
||||
item := &IPItem{
|
||||
IPFrom: utils.IP2Long("192.168.1.100"),
|
||||
IPFrom: utils.IP2LongHash("192.168.1.100"),
|
||||
IPTo: 0,
|
||||
ExpiredAt: time.Now().Unix() - 1,
|
||||
}
|
||||
a.IsFalse(item.Contains(utils.IP2Long("192.168.1.100")))
|
||||
a.IsFalse(item.Contains(utils.IP2LongHash("192.168.1.100")))
|
||||
}
|
||||
{
|
||||
item := &IPItem{
|
||||
IPFrom: utils.IP2Long("192.168.1.100"),
|
||||
IPFrom: utils.IP2LongHash("192.168.1.100"),
|
||||
IPTo: 0,
|
||||
ExpiredAt: 0,
|
||||
}
|
||||
a.IsFalse(item.Contains(utils.IP2Long("192.168.1.101")))
|
||||
a.IsFalse(item.Contains(utils.IP2LongHash("192.168.1.101")))
|
||||
}
|
||||
|
||||
{
|
||||
item := &IPItem{
|
||||
IPFrom: utils.IP2Long("192.168.1.1"),
|
||||
IPTo: utils.IP2Long("192.168.1.101"),
|
||||
IPFrom: utils.IP2LongHash("192.168.1.1"),
|
||||
IPTo: utils.IP2LongHash("192.168.1.101"),
|
||||
ExpiredAt: 0,
|
||||
}
|
||||
a.IsTrue(item.Contains(utils.IP2Long("192.168.1.100")))
|
||||
a.IsTrue(item.Contains(utils.IP2LongHash("192.168.1.100")))
|
||||
}
|
||||
|
||||
{
|
||||
item := &IPItem{
|
||||
IPFrom: utils.IP2Long("192.168.1.1"),
|
||||
IPTo: utils.IP2Long("192.168.1.100"),
|
||||
IPFrom: utils.IP2LongHash("192.168.1.1"),
|
||||
IPTo: utils.IP2LongHash("192.168.1.100"),
|
||||
ExpiredAt: 0,
|
||||
}
|
||||
a.IsTrue(item.Contains(utils.IP2Long("192.168.1.100")))
|
||||
a.IsTrue(item.Contains(utils.IP2LongHash("192.168.1.100")))
|
||||
}
|
||||
|
||||
{
|
||||
item := &IPItem{
|
||||
IPFrom: utils.IP2Long("192.168.1.1"),
|
||||
IPTo: utils.IP2Long("192.168.1.101"),
|
||||
IPFrom: utils.IP2LongHash("192.168.1.1"),
|
||||
IPTo: utils.IP2LongHash("192.168.1.101"),
|
||||
ExpiredAt: 0,
|
||||
}
|
||||
a.IsTrue(item.Contains(utils.IP2Long("192.168.1.1")))
|
||||
a.IsTrue(item.Contains(utils.IP2LongHash("192.168.1.1")))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +89,7 @@ func TestIPItem_Memory(t *testing.T) {
|
||||
list.Add(&IPItem{
|
||||
Type: "ip",
|
||||
Id: uint64(i),
|
||||
IPFrom: utils.IP2Long("192.168.1.1"),
|
||||
IPFrom: utils.IP2LongHash("192.168.1.1"),
|
||||
IPTo: 0,
|
||||
ExpiredAt: time.Now().Unix(),
|
||||
EventLevel: "",
|
||||
@@ -102,15 +104,18 @@ func TestIPItem_Memory(t *testing.T) {
|
||||
func BenchmarkIPItem_Contains(b *testing.B) {
|
||||
runtime.GOMAXPROCS(1)
|
||||
|
||||
item := &IPItem{
|
||||
IPFrom: utils.IP2Long("192.168.1.1"),
|
||||
IPTo: utils.IP2Long("192.168.1.101"),
|
||||
var item = &IPItem{
|
||||
IPFrom: utils.IP2LongHash("192.168.1.1"),
|
||||
IPTo: utils.IP2LongHash("192.168.1.101"),
|
||||
ExpiredAt: 0,
|
||||
}
|
||||
ip := utils.IP2Long("192.168.1.1")
|
||||
for i := 0; i < b.N; i++ {
|
||||
for j := 0; j < 10_000; j++ {
|
||||
|
||||
b.ResetTimer()
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
var ip = utils.IP2LongHash("192.168.1." + strconv.Itoa(rand.Int()%255))
|
||||
item.Contains(ip)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user