двойной кеш в Голанге - PullRequest
0 голосов
/ 03 мая 2019

Попытка решить простую проверку дубликатов с использованием кэша 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-кеша решает проблему, позволяя программе работать должным образом.

...