Sobes.tech
Senior
55

¿Cómo implementar una caché local con escritura segura en hilos por clave específica?

Empresas donde se preguntó
Octo

Respuesta de la IA

sobes.tech AI

Для реализации локального кэша с потокобезопасной записью по конкретному ключу в Java можно использовать класс ConcurrentHashMap. Он обеспечивает высокую производительность при конкурентном доступе и позволяет безопасно обновлять значения по ключам.

Пример реализации кэша с потокобезопасной записью:

import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;

public class LocalCache<K, V> {
    private final ConcurrentHashMap<K, V> cache = new ConcurrentHashMap<>();

    // Получить значение из кэша или вычислить и записать, если отсутствует
    public V getOrCompute(K key, Function<K, V> mappingFunction) {
        return cache.computeIfAbsent(key, mappingFunction);
    }

    // Явная запись значения по ключу
    public void put(K key, V value) {
        cache.put(key, value);
    }

    // Получить значение без вычисления
    public V get(K key) {
        return cache.get(key);
    }
}

Метод computeIfAbsent гарантирует, что вычисление и запись значения для конкретного ключа произойдет атомарно и только один раз, даже при конкурентном доступе из нескольких потоков.

Если нужна более сложная логика обновления, можно использовать cache.compute(key, remappingFunction), который также потокобезопасен.