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

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

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

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

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



Guava Cache
...
Рейтинг: 0 / 0
08.06.2018, 20:40
    #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
08.06.2018, 21:17
    #39658604
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос - куда во что ?
Нужно удалить определенные записи, но не сразу, а через 20 секунд?
...
Рейтинг: 0 / 0
09.06.2018, 13:14
    #39658834
Герой дня
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос - куда во что ?
fixxer,

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

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

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

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

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

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

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

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

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

может быть, но хотелось бы Set и с ограничением размера, что-то типа очереди - очередь ограничена размером, при вставке элементов не растет
...
Рейтинг: 0 / 0
09.06.2018, 18:11
    #39659049
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос - куда во что ?
Разве очередь подразумевает ограничение по длине? Концепция FILO и не более того.
Возьми LinkedHashMap и удаляй лишнее, хоть кажду итерацию, хоть отдельным циклом.
...
Рейтинг: 0 / 0
09.06.2018, 18:42
    #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
09.06.2018, 18:57
    #39659060
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос - куда во что ?
Хотел написать про CircleRingBuffer

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

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

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

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


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