optimize
This commit is contained in:
parent
ddf6e62e5a
commit
f369cf4f22
28
cache/map.go
vendored
28
cache/map.go
vendored
|
@ -131,16 +131,24 @@ func (m *MapCache[K, V]) GetCache(c context.Context, key K, timeout time.Duratio
|
|||
func (m *MapCache[K, V]) GetCacheBatch(c context.Context, key []K, timeout time.Duration, params ...any) ([]V, error) {
|
||||
var res []V
|
||||
ver := 0
|
||||
needFlush := slice.FilterAndMap(key, func(k K) (r K, ok bool) {
|
||||
if _, ok := m.Get(c, k); !ok {
|
||||
var needFlush []K
|
||||
var needIndex = make(map[int]K)
|
||||
slice.ForEach(key, func(i int, k K) {
|
||||
v, ok := m.Get(c, k)
|
||||
var vv V
|
||||
if ok {
|
||||
vv = v
|
||||
} else {
|
||||
needFlush = append(needFlush, k)
|
||||
ver += m.Ver(c, k)
|
||||
return k, true
|
||||
needIndex[i] = k
|
||||
}
|
||||
return
|
||||
res = append(res, vv)
|
||||
})
|
||||
|
||||
if len(needFlush) < 1 {
|
||||
return res, nil
|
||||
}
|
||||
var err error
|
||||
if len(needFlush) > 0 {
|
||||
call := func() {
|
||||
m.mux.Lock()
|
||||
defer m.mux.Unlock()
|
||||
|
@ -178,9 +186,11 @@ func (m *MapCache[K, V]) GetCacheBatch(c context.Context, key []K, timeout time.
|
|||
} else {
|
||||
call()
|
||||
}
|
||||
for index, k := range needIndex {
|
||||
v, ok := m.Get(c, k)
|
||||
if ok {
|
||||
res[index] = v
|
||||
}
|
||||
}
|
||||
res = slice.FilterAndMap(key, func(k K) (V, bool) {
|
||||
return m.Get(c, k)
|
||||
})
|
||||
return res, err
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user