powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Срочный вопрос - куда во что ?
18 сообщений из 18, страница 1 из 1
Срочный вопрос - куда во что ?
    #39658572
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аврал с кэшами, нужно сделать следующую вещь:

в приложение приходит массив ID, которые надо положить во что-то (складывать в это что-то в течение нескольких секунд), а потом при наступлении @Scheduled(fixedDelay = 1000 * 20) это что-то передать в evict() метод для очистки кешей с такими ID.

При этом после передачи надо удалить элементы из этого что-то - удалить те, которые передали в evict().

Что посоветуете ?
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39658590
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Герой дня,

Код: java
1.
2.
3.
com.google.common.cache.CacheBuilder.newBuilder()
       .maximumSize(10000)
       .expireAfterWrite(20, TimeUnit.SECONDS);



Guava Cache
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39658595
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надо удалять не по времени, так нормально ?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
    

public class ProductCacheServiceImpl implements ProductCacheService {

    private ConcurrentSkipListSet<Long> queueIds = new ConcurrentSkipListSet<>();

    public void evictByProductIds(Iterable<Long> productIds) {
        productIds.forEach(queueIds::add);
    }

    @Scheduled(fixedDelay = 1000 * 20)
    public void processCacheEviction() {
        if (queueIds.isEmpty()) {
            return;
        }

        ArrayList<Long> productIds = new ArrayList<>();
        
        synchronized(queueIds) {
            while (!queueIds.isEmpty()){
                productIds.add(queueIds.pollFirst());
            }
        }

        cacheManager.findKeysByAttributeValues(FACETS_BY_IDS, FACETS_IDS_ATTRIBUTE, productIds).forEach(productFind::evict);
    }
}
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39658604
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно удалить определенные записи, но не сразу, а через 20 секунд?
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39658834
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fixxer,

да, эти ID надо накопить и потом через 20 сек очистить, причем, в момент очищения не должно быть конфликтов с другими потоками, которые хотят добавить новые ID в тот же буфер
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39658845
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я не понимаю, но я вообще проблемы не вижу.

Копить данные в любой коллекции, хоть ArrayList.

При наступлении момента X - всю ArrayList передаете в метод очистки, а на ее месте создаете новый ArrayList

не должно быть конфликтов с другими потоками, которые хотят добавить новые ID в тот же буфер

А зачем в тот же? создайте новый
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39658944
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevМожет я не понимаю, но я вообще проблемы не вижу.

Копить данные в любой коллекции, хоть ArrayList.

При наступлении момента X - всю ArrayList передаете в метод очистки, а на ее месте создаете новый ArrayList

не должно быть конфликтов с другими потоками, которые хотят добавить новые ID в тот же буфер

А зачем в тот же? создайте новый

может быть, но хотелось бы Set и с ограничением размера, что-то типа очереди - очередь ограничена размером, при вставке элементов не растет
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39659049
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разве очередь подразумевает ограничение по длине? Концепция FILO и не более того.
Возьми LinkedHashMap и удаляй лишнее, хоть кажду итерацию, хоть отдельным циклом.
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39659058
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,

нашел org.apache.commons.collections4.queue.CircularFifoQueue;

CircularFifoQueue is a first-in first-out queue with a fixed size that replaces its oldest element if full.
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39659060
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотел написать про CircleRingBuffer

но это не Set. Ну и не понятно, что Вы собираетесь делать, если в момент вставки "место закончилось". Так же непонятны требования к concurrent'ности.

Можно на https://github.com/JCTools/JCTools посмотреть
Там вроде есть Multi Producer Single Consumer коллекции
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39659064
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я как понимаю, в коде в сообщение 2 может быть единственная опасность: если данные добавляются быстрее, чем выгребаются, то теоретически можно попасть в вечный цикл, т.к. queue-set никогда не будет пустой.

"Допилив" очереди типа CircleRingBuffer'а, можно перед извлечением сохранять текущий индекс, и останавливать выборку, когда подобрались к этому индексу, это уже пойдут данные, записанные послен того, как processCacheEviction был запущен.

IMHO
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39659068
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так сам сказал, что set нужен.
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39659070
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, я еще что-то fifo с filo перепутал.
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39659164
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем, пока остановился на промежуточном этапе с обычной очередью
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39659186
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Герой дня,
Ну и тему топика ты создал. Как новичОк)).
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39659187
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Герой дня,
В том смысле что озаглавил тему)))
автор Срочный вопрос - куда во что ?
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39659207
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня тоже смутило название топика. Куда-во-что. Войти в It..
...
Рейтинг: 0 / 0
Срочный вопрос - куда во что ?
    #39659225
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Срочный вопрос - куда во что ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]