2023-10-27 12:51:46 +00:00
|
|
|
package cachemanager
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
"github.com/fthvgb1/wp-go/helper/number"
|
|
|
|
"github.com/fthvgb1/wp-go/taskPools"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestFlushMapVal(t *testing.T) {
|
|
|
|
_ = number.Range(1, 5, 0)
|
|
|
|
t.Run("t1", func(t *testing.T) {
|
|
|
|
count := 0
|
|
|
|
vv := NewMemoryMapCache(func(ctx2 context.Context, ks []int, a ...any) (map[int]int, error) {
|
|
|
|
r := make(map[int]int)
|
|
|
|
for _, k := range ks {
|
|
|
|
r[k] = k * k
|
|
|
|
}
|
|
|
|
count++
|
|
|
|
return r, nil
|
|
|
|
}, nil, time.Second, "test")
|
|
|
|
|
|
|
|
gets, err := GetMultiple[int]("test", ctx, number.Range(1, 10), time.Second)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(t, "err:", err)
|
|
|
|
}
|
|
|
|
p := taskPools.NewPools(10)
|
|
|
|
for i := 0; i < 20; i++ {
|
|
|
|
i := i
|
|
|
|
p.Execute(func() {
|
|
|
|
if i%2 == 0 {
|
|
|
|
vv.Get(ctx, 5)
|
|
|
|
} else {
|
|
|
|
vv.Set(ctx, i, i)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
p.Wait()
|
|
|
|
fmt.Println(gets, count)
|
|
|
|
FlushMapVal("test", 3, 4)
|
|
|
|
fmt.Println(vv.Get(ctx, 3))
|
|
|
|
fmt.Println(vv.Get(ctx, 4))
|
|
|
|
get, err := Get[int]("test", ctx, 3, time.Second)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(t, "err", err)
|
|
|
|
}
|
|
|
|
fmt.Println(get, count)
|
|
|
|
fmt.Println(vv.Get(ctx, 5))
|
|
|
|
FlushAnyVal("test")
|
|
|
|
fmt.Println(vv.Get(ctx, 5))
|
|
|
|
fmt.Println(vv.Get(ctx, 6))
|
|
|
|
})
|
|
|
|
}
|
2023-10-31 11:23:38 +00:00
|
|
|
|
|
|
|
func TestSetExpireTime(t *testing.T) {
|
|
|
|
t.Run("t1", func(t *testing.T) {
|
|
|
|
c := NewMemoryMapCache[string, string](nil, nil, time.Second, "xx")
|
|
|
|
c.Set(ctx, "xx", "yy")
|
|
|
|
fmt.Println(c.Get(ctx, "xx"))
|
|
|
|
time.Sleep(time.Second)
|
|
|
|
fmt.Println(c.Get(ctx, "xx"))
|
2023-11-02 14:40:13 +00:00
|
|
|
ChangeExpireTime(3*time.Second, "xx")
|
2023-10-31 11:23:38 +00:00
|
|
|
c.Set(ctx, "xx", "yyy")
|
|
|
|
time.Sleep(time.Second)
|
|
|
|
fmt.Println(c.Get(ctx, "xx"))
|
|
|
|
time.Sleep(3 * time.Second)
|
|
|
|
fmt.Println(c.Get(ctx, "xx"))
|
|
|
|
})
|
|
|
|
}
|