powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Вытесняющий кэш для высоконагруженной системы?
25 сообщений из 96, страница 2 из 4
Вытесняющий кэш для высоконагруженной системы?
    #39912029
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начнём с простого:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public class UserRepositoryCacheDecorator extends UserRepository {

    private Cache cache;
    private UserRepository decorated;

    public UserRepositoryCacheDecorator(UserRepository decorated, Cache cache) {
        this.cache = cache;
        this.decorated = decorated;
    }

    @Override
    public User getUserByLogin(String login) {
        if(cache.contains(login)){
            return cache.load(login);
        }
        User user = decorated.getUserByLogin(login);
        cache.save(login, user);
        return user;
    }
}


Как зарегистрировать это в IoC-контейнере показывать, или сами догадаетесь?
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912044
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Теперь тестами покажи что ТЗ выполнил.
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912061
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA
Начнём с простого:

Тут скорее вопрос не в том, можно ли это сделать через декораторы, а можно ли сделать "хорошее кэш апи" через декораторы. Для каждого сервиса/репозитория писать свой декоратор? Через АОП это решается гораздо удобнее. Тот же spring cache как неплохой пример.
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912063
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan
skyANA
Начнём с простого:

Тут скорее вопрос не в том, можно ли это сделать через декораторы, а можно ли сделать "хорошее кэш апи" через декораторы. Для каждого сервиса/репозитория писать свой декоратор? Через АОП это решается гораздо удобнее. Тот же spring cache как неплохой пример.
А покажите код, если не сложно.
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912066
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan,
Ну и в хибере есть два кеша. Второй выключен.
Выше писал, что про ОРМ в тз непонятно.
Написана фраза "структуры данных")))))
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912068
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan,
То есть с ОРМ есть кеш в спринге, хибере два штуки. Без ОРМ есть кеш на клиенте от драйвера. То есть он будет на АппСервере реально.
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912070
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, к примеру:
https://spring.io/guides/gs/caching/
Код: java
1.
2.
3.
4.
5.
6.
  @Override
  @Cacheable("books")
  public Book getByIsbn(String isbn) {
    simulateSlowService();
    return new Book(isbn, "Some book");
  }



Все в итоге сводится к аннотации над методом. Есть аналогичные @CacheEvict для инвалидации кешей и прочие мелкие радости )
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912072
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
SpringMan,
То есть с ОРМ есть кеш в спринге, хибере два штуки. Без ОРМ есть кеш на клиенте от драйвера. То есть он будет на АппСервере реально.

В моей жизни, в хибере обычно без второго уровня. Просто если надо, то кэшируют через спринг на уровне серисов.
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912083
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan,
Да. Там JPA рулит
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912088
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
PetroNotC Sharp
skyANA,
К топику шаблон привязать не получится. Тем более не программисту.
Не понял мысль.

Уже говорил, но вы забыли. Весь ваш опыт в шарп идет лесом в java.
Так как вместо JPA у вас NPA который не применяют.
Вместо спринга у вас EF, который совсем не спринг.
И так далее.
Пишите цветочный магазин.
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912094
gycb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SpringMan
skyANA, к примеру:
https://spring.io/guides/gs/caching/
Код: java
1.
2.
3.
4.
5.
6.
  @Override
  @Cacheable("books")
  public Book getByIsbn(String isbn) {
    simulateSlowService();
    return new Book(isbn, "Some book");
  }



Все в итоге сводится к аннотации над методом. Есть аналогичные @CacheEvict для инвалидации кешей и прочие мелкие радости )
тоесть если я правильно понял - то эта анотация делает следущее
при образщении к этому методу создает кеш- и если при следущем обращении пользователь попросит ту же самую книгу -она достанется из кэша?
и еще вопрос для каких систем это акутально - например для систем с ожидаемым количеством юзеров от 20 до 50 единомоментно есть смысл анотировать особо горячие методы?
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912103
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gycb,
Нет смысла и даже вредно.
У тебя база ненормализована и этот факт съедает все разговоры об эффективности кеша.
Тормозит база, а ты снаружи пришлепку кеша))
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912105
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gycb

тоесть если я правильно понял - то эта анотация делает следущее
при образщении к этому методу создает кеш- и если при следущем обращении пользователь попросит ту же самую книгу -она достанется из кэша?
и еще вопрос для каких систем это акутально - например для систем с ожидаемым количеством юзеров от 20 до 50 единомоментно есть смысл анотировать особо горячие методы?

Концептуально, да. По сути она должна использовать javax.cache api (тут на 100% не уверен, всегда ли так - надо смотреть отдельно). Что и когда надо кэшировать это индивидуально: иногда помогает сильно, иногда больше проблем из-за инвалидации кэша и т.п. Тяжелые запросы, которые часто вызываются и редко меняют результат, - потенциально хорошее место для кеширования
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912127
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
skyANA
пропущено...
Не понял мысль.

Уже говорил, но вы забыли. Весь ваш опыт в шарп идет лесом в java.
Так как вместо JPA у вас NPA который не применяют.
Вместо спринга у вас EF, который совсем не спринг.
И так далее.
Пишите цветочный магазин.
И где же тут логика, может кто-нибудь объяснить? :)
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912129
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Вы съехали с темы.
Передложили паттерн, покажите что решает задачу.
Просили код? Вам пример кода спринга дали.
Дальше никто ничего не обязан разжёвывать.
Все работают. Некогда.
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912143
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петя в своём репертуаре: флудит.
В игнор.
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912145
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan
skyANA, к примеру:
https://spring.io/guides/gs/caching/
Код: java
1.
2.
3.
4.
5.
6.
  @Override
  @Cacheable("books")
  public Book getByIsbn(String isbn) {
    simulateSlowService();
    return new Book(isbn, "Some book");
  }



Все в итоге сводится к аннотации над методом. Есть аналогичные @CacheEvict для инвалидации кешей и прочие мелкие радости )А на Save своя аннотация?
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912151
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
Петя в своём репертуаре: флудит.
В игнор.
это в который раз обещания?
Уже и на майке писал, и скрипты всем раздавал.
Игнорируй!
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912152
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
skyANA
Петя в своём репертуаре: флудит.
В игнор.
это в который раз обещания?
Уже и на майке писал, и скрипты всем раздавал.
Игнорируй!
У мобильной версии разметка отличается от стандартного дизайна. Вот скрипт и не отрабатывают.
Переключаюсь обратно на стандартный дизайн.
Пока, Петя :)
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912157
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Еще раз попрощайся))))
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912188
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA
А на Save своя аннотация?

По сути с кешом что можно делать: положить значение для какого-то уникального ключа и сказать удалить его. Аннотации это и делают. @Cacheable - кладет в кэш (или берет, если уже есть), @CacheEvict - удаляет из кэша. Вот на save и надо @CacheEvict. Есть еще @CachePut, который всегда обновляет кэш - я им не пользовался, но по идее его над save-ом тоже можно/нужно использовать.
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912204
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дай бох. Spring для нас всегда создавал иллюзию полного контроля. Только вот где та самая золотая "середина"?
С одной стороны можешь всю БД в себя втянуть. И с другой стороны сделать этот механизм бесполезным передаточным
звеном.

P.S. There are only two hard things in Computer Science: cache invalidation and naming things.

-- Phil Karlton
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912207
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
С одной стороны можешь всю БД в себя втянуть
и нефиг какие-то базы использовать, что в них толку, только место занимают. то ли дело всё в памяти хранить, быстрее всё равно ничего нет.
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912209
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

P.S. There are only two hard things in Computer Science: cache invalidation and naming things.
-- Phil Karlton

"Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand.
...
Рейтинг: 0 / 0
Вытесняющий кэш для высоконагруженной системы?
    #39912211
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov
GrossmasteR
Уважаемые форумчане, здравствуйте! С рождеством!
Нужен ваш совет.
Очень нужно сделать тестовое задание.
Уровень знаний: +- основы JDBC и сервлетов без Spring.
Задание по ссылке. В какую сторону копать, пожалуйста, подскажите?
https://drive.google.com/open?id=1kcLCYtCkzDwNs0cFpDIZ-VpyOiX_Y3ed


Код для вытесняющий кэш для высоконагруженной системы.

Код: 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.
28.
public class LruCache<K, V> {
        private static final boolean SORT_BY_ACCESS = true;
        private static final float LOAD_FACTOR = 0.75F;
        private final Map<K, V> lruCacheMap;
        private final int capacity;

        public LruCache(int capacity) {
            this.capacity = capacity;
            this.lruCacheMap = new LinkedHashMap<K, V>(capacity, LOAD_FACTOR, SORT_BY_ACCESS);
        }

        public V get(K key) {
            return lruCacheMap.get(key);
        }

        public void put(K key, V value) {
            if (lruCacheMap.containsKey(key)) {
                lruCacheMap.remove(key);
            } else if (lruCacheMap.size() >= capacity) {
                lruCacheMap.remove(lruCacheMap.keySet().iterator().next());
            }
            lruCacheMap.put(key, value);
        }
    }

    public static <K, V> LruCache<K, V> createLruCache(final int capacity) {
        return new LruCache<K, V>(capacity);
    }



Хорошего вам дня!


Здравствуйте. Может быть у вас есть возможность объяснить, как это работает? Или что нужно читать/смотреть/изучать, чтобы в этом разобраться?

Признаться, я когда получил это задание, первая мысль была, это что, на древнеегипетском?
Это были небольшие оффлайн-курсы, после которых одна организация, в случае успешной защиты итогового проекта, обещалась позвать на собеседование. Итоговый проект был веб-сервис без использования Spring поисковая система: загружаешь текстовые файлы, вводишь поисковый запрос, получаешь файл со строчками в которых содержится поисковый запрос, желательно с многопоточностью.
После итогового, они сказали, мол, ну будем считать, что на ваш код мы посмотрели, теперь дадим вам задание, чтобы посмотреть, как выдумаете.
Серьезно? Это вот это вот посмотреть, как мы думаем? Над чем? Это что, новогодний розыгрыш был? Ну типа люди знали наш уровень, что мы худо бедно что-то понимаем в Java Syntax, Core, Collections, имеем какое-то отдаленное представление о Multithreading, SQL, JAVA EE. И дают вот такое задание, которое не похоже на задание для предJunior/Junior.
Я до сих пор допускаю мысль, что они либо перепутали ТЗ, либо сделали это специально, чтобы нас слить по какой-то причине.

Ладно с лирическим отступлением все. Как это изучить? Может быть какие-то книги/курсы есть?

P.S. "...По времени жёсткой привязки нет, главное что бы соискатели озвучили срок и уложились в него..." А препод по курсам нам сказал: "По задачкам : они на самом деле не сложные, вам нужно просто:
1. Загуглить все умные слова и понять, что они значат
2. Упростить задачу (не переусложнять решение) - на самом деле оно на поверхности и достаточно просто гуглится (нужно будет изучить штук 5-6 ссылок в результатах Google)"
...
Рейтинг: 0 / 0
25 сообщений из 96, страница 2 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Вытесняющий кэш для высоконагруженной системы?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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