Вопрос: Как реализовать simple cache with TTL (вариант с cleanup goroutine)?
Python
Middle
Без компании
Вопрос: Как реализовать simple cache with TTL (вариант с cleanup goroutine)?
Ответы
```go
type Cache struct {
mu sync.Mutex
m map[string]item
}
type item struct{ v string; exp time.Time }
func (c *Cache) cleanupLoop(ctx context.Context) {
t := time.NewTicker(time.Minute)
defer t.Stop()
for {
select {
case <-ctx.Done():
return
case <-t.C:
c.mu.Lock()
now := time.Now()
for k, it := range c.m {
if now.After(it.exp) { delete(c.m, k) }
}
c.mu.Unlock()
}
}
}
```
**Как это работает:** периодическая очистка предотвращает рост map. Для продакшна учитывают нагрузку и время блокировок.