O(1). Там в основе лежит хэшмапа для хранения значений, и массив хэш сетов для хранения связанных нод и метаинформации о частоте использования объекта в кэше (индекс массива -> частота вызова сета объектов). То есть при вызове объекта из хешмапы, идёт перемешаете ноды слева направо по массиву. При eviction по размеру дропаются ноды слева. И все было ок, но сейчас мне нужно сделать кэш thread safe и при этом не потерять в эффективности. Возможно, посоветуете что есть почитать, посмотреть на эту тему. Как сделать структуру данных потоко безопасной и и.д.? Спасибо 🧐
Почему именно самописное?
И что, при удалении элемента ближе к краю будет весь массив двигаться?
Нет, не двигаются, просто наименее использованные, будут слева и дропнутся
Почему они должны дропаться, когда я удаляю один ключ?
При переполнении кэша стоит eviction factor в 1%, когда в кэш вставится элемент который превышает максимальный лимит, то 1% наименее используемых объектов из него удалится
Почему бы не взять caffeine просто?
Да, я смотрю его и Guava как пример, так поставлена задача 🤓
Задача в том, чтобы свой кеш сочинить?
Да, нужен thread safe LFU cache с O(1)
Минимально инвазивно можно просто массив ридврайтлоков добавить
Обсуждают сегодня