347
}
348
349
>
c.tryEvictUntilEnoughSpaceWithSkipEntry(newEntrySize, nil)
lru.go
350
>
351
>
// check if the new entry can fit in the cache
352
>
newCacheSize := c.calculateNewCacheSize(newEntrySize, emptyEntrySize)
353
>
if newCacheSize > c.maxSize {
354
return nil, ErrCacheFull
355
}
356
357
>
entry := &entryImpl{
lru.go
358
>
key: key,
359
>
value: value,
360
>
size: newEntrySize,
361
>
}
362
>
c.updateEntryTTL(entry)
363
>
c.updateEntryRefCount(entry)
364
>
element := c.byAccess.PushFront(entry)
365
>
c.byKey[key] = element
366
>
c.currSize = newCacheSize
367
>
metrics.CacheUsage.With(c.metricsHandler).Record(float64(c.currSize))
368
>
369
>
if c.onPut != nil {
370
c.onPut(value)
371
}
372
374
}
375
376
>
func (c *lru) calculateNewCacheSize(newEntrySize int, existingEntrySize int) int {
lru.go
377
>
return c.currSize - existingEntrySize + newEntrySize
378
>
}
379
380
func (c *lru) deleteInternal(element *list.Element) {