Skip to content

Commit d9d2fb0

Browse files
committed
feat: new experimental gc friendly flatten cache
Signed-off-by: Rueian <[email protected]>
1 parent 76151e2 commit d9d2fb0

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

cache.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,13 @@ func (a *adapterEntry) set(val RedisMessage, err error) {
173173
}
174174

175175
func (a *adapterEntry) Wait(ctx context.Context) (RedisMessage, error) {
176+
ctxCh := ctx.Done()
177+
if ctxCh == nil {
178+
<-a.ch
179+
return a.val, a.err
180+
}
176181
select {
177-
case <-ctx.Done():
182+
case <-ctxCh:
178183
return RedisMessage{}, ctx.Err()
179184
case <-a.ch:
180185
return a.val, a.err
@@ -191,7 +196,7 @@ type flatentry struct {
191196
ttl int64
192197
size int64
193198
mark int64
194-
mu sync.Mutex
199+
mu sync.RWMutex
195200
}
196201

197202
func (f *flatentry) insert(e *flatentry) {
@@ -214,9 +219,9 @@ func (f *flatentry) find(cmd string, ts int64) (ret RedisMessage, expired bool)
214219
_ = ret.CacheUnmarshalView(f.val)
215220
return
216221
}
217-
f.mu.Lock()
222+
f.mu.RLock()
218223
ovfl := f.ovfl
219-
f.mu.Unlock()
224+
f.mu.RUnlock()
220225
return ovfl.find(cmd, ts)
221226
}
222227

0 commit comments

Comments
 (0)