@@ -324,6 +324,10 @@ func (c *InMemoryCache) Close() error {
324
324
325
325
// Clear all entries to free memory
326
326
c .entries = nil
327
+
328
+ // Zero cache entries metrics
329
+ metrics .UpdateCacheEntries ("memory" , 0 )
330
+
327
331
return nil
328
332
}
329
333
@@ -355,7 +359,7 @@ func (c *InMemoryCache) GetStats() CacheStats {
355
359
return stats
356
360
}
357
361
358
- // cleanupExpiredEntries removes entries that have exceeded their TTL
362
+ // cleanupExpiredEntries removes entries that have exceeded their TTL and updates the cache entry count metric to keep metrics in sync.
359
363
// Caller must hold a write lock
360
364
func (c * InMemoryCache ) cleanupExpiredEntries () {
361
365
if c .ttlSeconds <= 0 {
@@ -372,20 +376,25 @@ func (c *InMemoryCache) cleanupExpiredEntries() {
372
376
}
373
377
}
374
378
375
- if len (validEntries ) < len (c .entries ) {
376
- expiredCount := len (c .entries ) - len (validEntries )
377
- observability .Debugf ("InMemoryCache: TTL cleanup removed %d expired entries (remaining: %d)" ,
378
- expiredCount , len (validEntries ))
379
- observability .LogEvent ("cache_cleanup" , map [string ]interface {}{
380
- "backend" : "memory" ,
381
- "expired_count" : expiredCount ,
382
- "remaining_count" : len (validEntries ),
383
- "ttl_seconds" : c .ttlSeconds ,
384
- })
385
- c .entries = validEntries
386
- cleanupTime := time .Now ()
387
- c .lastCleanupTime = & cleanupTime
379
+ if len (validEntries ) == len (c .entries ) {
380
+ return
388
381
}
382
+
383
+ expiredCount := len (c .entries ) - len (validEntries )
384
+ observability .Debugf ("InMemoryCache: TTL cleanup removed %d expired entries (remaining: %d)" ,
385
+ expiredCount , len (validEntries ))
386
+ observability .LogEvent ("cache_cleanup" , map [string ]interface {}{
387
+ "backend" : "memory" ,
388
+ "expired_count" : expiredCount ,
389
+ "remaining_count" : len (validEntries ),
390
+ "ttl_seconds" : c .ttlSeconds ,
391
+ })
392
+ c .entries = validEntries
393
+ cleanupTime := time .Now ()
394
+ c .lastCleanupTime = & cleanupTime
395
+
396
+ // Update metrics after cleanup
397
+ metrics .UpdateCacheEntries ("memory" , len (c .entries ))
389
398
}
390
399
391
400
// cleanupExpiredEntriesReadOnly identifies expired entries without modifying the cache
0 commit comments