dylinkprov: implement random cache replacement policy
Signed-off-by: HeshamTB <hishaminv@gmail.com>
This commit is contained in:
parent
1dc2dcd539
commit
9581ea8885
2
TODO
2
TODO
@ -1,5 +1,3 @@
|
||||
- Avoid invoking getRemoteLink multiple times for the same item id
|
||||
for link providers
|
||||
|
||||
- Limite cache size (Cache replacement policy)
|
||||
|
||||
|
@ -15,7 +15,10 @@ import (
|
||||
"github.com/lrstanley/go-ytdlp"
|
||||
)
|
||||
|
||||
const Q_EXPIRE = "expire"
|
||||
const (
|
||||
Q_EXPIRE = "expire"
|
||||
MAX_MAP_SZ = 1000
|
||||
)
|
||||
|
||||
type DynamicCacheExpLinkProvider struct {
|
||||
cache map[string]url.URL
|
||||
@ -58,11 +61,18 @@ func (d *DynamicCacheExpLinkProvider) GetLink(id string) (link string, err error
|
||||
}
|
||||
|
||||
d.lock.Lock()
|
||||
if len(d.cache) >= MAX_MAP_SZ {
|
||||
var k string
|
||||
for kk := range d.cache {
|
||||
k = kk
|
||||
break
|
||||
}
|
||||
delete(d.cache, k)
|
||||
}
|
||||
d.cache[id] = *newlinkurl
|
||||
d.lock.Unlock()
|
||||
|
||||
d.l.Printf("[cache] new entry for %s\n", id)
|
||||
d.l.Printf("%d items in map\n", len(d.cache))
|
||||
return newlinkurl.String(), nil
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user