У меня есть прецедент, когда я хочу заполнять записи в структуре данных из нескольких потоков и после достижения определенного размера начинает отбрасывать старые записи. Поэтому я решил использовать для этого загрузочный кэш Guava.Как заполнить записи в Кэширование загрузки?
Я хочу заполнить записи в свой загрузочный кэш из нескольких потоков, и я устанавливаю политику на основе выселения как Size Based Eviction
.
private final ScheduledExecutorService executorService = Executors
.newSingleThreadScheduledExecutor();
private final LoadingCache<String, DataBuilder> cache =
CacheBuilder.newBuilder().maximumSize(10000000)
.removalListener(RemovalListeners.asynchronous(new CustomListener(), executorService))
.build(new CacheLoader<String, DataBuilder>() {
@Override
public DataBuilder load(String key) throws Exception {
// what I should do here?
// return
}
});
// this will be called from multiple threads to populate the cache
public void addToCache(String key, DataBuilder dataBuilder) {
// what I should do here?
//cache.get(key).
}
Мой addToCache
метод будет вызываться из нескольких потоков для заполнения cache
. Я путаю то, что я должен делать внутри метода addToCache
для заполнения кеша, а также как выглядит мой метод load
?
Здесь DataBuilder
- это мой рисунок строителя.
Как мы должны знать, как вы хотите, чтобы загрузить данные? И почему вы хотите предварительно заполнить свой кеш, вместо того чтобы разрешить ему ленивую загрузку? – shmosel
Я имею в виду мой вопрос, так как у меня есть 'DataBuilder', доступный в методе' addToCache'. Как я могу использовать это для заполнения LoadCache? Это мое замешательство. –