Попытка решить простую проверку дубликатов с использованием кэша l1 с использованием одной из этих 2 библиотек https://github.com/patrickmn/go-cache или https://github.com/karlseguin/ccache
Выполняется несколько процедур, которые извлекают большой объем данных из восходящего потокаAPI.Внутри каждого есть цикл for range
, который проверяет, является ли ключ попаданием или промахом.В случае попадания цикл должен пропустить и перейти к следующей итерации.Как вы уже догадались, кеш должен быть безопасным для параллелизма.Я также создаю экземпляр только 1 экземпляра этого кэша (x.cacheInstance
).
for _, record := range data {
...
exists := x.cacheInstance.Get(record.DocumentID)
if exists == nil {
x.cacheInstance.Set(record.DocumentID, true, time.Minute * 10)
} else {
c.logger.Warnw("DocumentID duplicate located", "documentID", record.DocumentID)
continue
}
...
}
Однако приложение, кажется, зависает и не продолжает перебирать записи.Комментирование проверки lru-кеша решает проблему, позволяя программе работать должным образом.