Назад к вопросам
МТС
Middle+
4
Работал ли ты с кэшированием? Если да, то с каким?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Да, в проектах на Go я использовал кэширование для повышения производительности и снижения нагрузки на базу данных. В основном работал с:
- Встроенным кэшем в памяти с использованием map и sync.RWMutex для потокобезопасности.
- Redis как внешний кэш для распределённых систем, используя библиотеку go-redis.
Пример простого кэша в памяти:
package main
import (
"sync"
"time"
)
type Cache struct {
mu sync.RWMutex
store map[string]string
}
func NewCache() *Cache {
return &Cache{store: make(map[string]string)}
}
func (c *Cache) Get(key string) (string, bool) {
c.mu.RLock()
defer c.mu.RUnlock()
val, ok := c.store[key]
return val, ok
}
func (c *Cache) Set(key, value string) {
c.mu.Lock()
defer c.mu.Unlock()
c.store[key] = value
}
func main() {
cache := NewCache()
cache.Set("user_1", "John Doe")
if val, ok := cache.Get("user_1"); ok {
println(val) // John Doe
}
// Можно добавить логику очистки по времени и т.д.
}
Такой подход помогает уменьшить количество запросов к медленным источникам данных и ускорить отклик сервиса.