powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Вопрос по кешированию
25 сообщений из 93, страница 3 из 4
Вопрос по кешированию
    #39946046
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Дмитрий Мух
Ну к примеру не лепить блокировки :)

Да и просто исключить лишнее обращение к БД.


Ну ведь это только на самых банальных, чисто учебных примерах так. В реальных приложениях есть проекции данных, которые кешируются.

Например, скидка, которая рассчитывается из множества данных, размещённых в разных агрегатах.
Какой толк от этой реализации?

Инвалидация нужна.

в реальных приложениях есть и то, о чём я пишу, и то, о чём ты...
и во втором случае именно инвалидация происходит
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946047
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergq
Максимум что скудный умишко подсказывает — ставить в редисе ttl записи минут 20.

В итоге запись протухнет через 20 минут и при следующем запросе данные подскребутся с базы

Есть еще одна схема кеширования. Если твоя БД легко трекает дату изменения
документа (легче чем формирование его в response) то можно сделать такой
вот тег в запросе.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since

Но это потребует от клиента хранения времени актуальности последнего обращения ну и трекать
коды 200 и 304 соотв.
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946048
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух
в реальных приложениях есть и то, о чём я пишу, и то, о чём ты...
и во втором случае именно инвалидация происходит


В твоём примере кода нет важной проверки, что ты не должен делать Set, если данных в кеше нет.
Так и должно быть?
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946049
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух,

Всё же, запись в кеш при изменении, даёт реальный боевой профит? Понимаю, что вроде как нет лишнего запроса в БД, но один лишний запрос не является проблемой, важно поддержать все остальные тысячи запросов, а не один несчастный запрос )
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946050
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Есть еще одна схема кеширования. Если твоя БД легко трекает дату изменения
документа (легче чем формирование его в response) то можно сделать такой
вот тег в запросе.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since

Но это потребует от клиента хранения времени актуальности последнего обращения ну и трекать
коды 200 и 304 соотв.


Лучше ETag использовать, вроде. Жаль, что разработчики АПИ очень редко поддерживают эти теги.
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946052
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Дмитрий Мух
в реальных приложениях есть и то, о чём я пишу, и то, о чём ты...
и во втором случае именно инвалидация происходит


В твоём примере кода нет важной проверки, что ты не должен делать Set, если данных в кеше нет.
Так и должно быть?

Есть такая проверка:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    public SomeEntity Get(int id)
    {
        var entity = this.cache.Get(id);

        if (entity != null)
        {
            return entity;
        }

        entity = this.repository.Get(id);

        if (entity != null)
        {
            this.cache.Set(entity);
        }

        return entity;
    }
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946053
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mayton
Есть еще одна схема кеширования. Если твоя БД легко трекает дату изменения
документа (легче чем формирование его в response) то можно сделать такой
вот тег в запросе.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since

Но это потребует от клиента хранения времени актуальности последнего обращения ну и трекать
коды 200 и 304 соотв.


Лучше ETag использовать, вроде. Жаль, что разработчики АПИ очень редко поддерживают эти теги.

Да это хороший вариант когда идет тесная дружба фронта с Amazon-S3. Там все ресурсы
независимо от разработки уже имеют расчетное поле md5 и его остается только взять
из атрибута объекта и передать в responce.

В других случаях расчет хеша может быть затруднительным.
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946054
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух
Есть такая проверка:


Так это проверка в Get, а не в Set.
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946055
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В других случаях расчет хеша может быть затруднительным.


Так е-таг можно и время записать, и вообще что угодно, это не обязательно должен быть именно хеш :)
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946056
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Дмитрий Мух
Есть такая проверка:


Так это проверка в Get, а не в Set.

А в Set она зачем? Просто кладём актуальные данные в кэш.
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946057
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух
А в Set она зачем? Просто кладём актуальные данные в кэш.


Так, погоди.

Дмитрий Мух
Когда происходят операции типа "по случаю карантина всем скидос увеличивает на 10%", тогда иначе.

Например делаем, чтобы какой-то хэш в ключе кэширования сменился, следовательно по ключу в кэше уже ничего находится не будет и он заполнится актуальными данными.


Т.е. мы должны реализацию кеша менять? А если это просто аспект?
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946058
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух,

Просто у тебя, получается, изменение обязательно кладёт сущность в кеш.
А нафига она там в любом случае?
Массовые изменения тоже будут заполнять кеш?
В общем, профит до сих пор непонятен.

Кеш решает задачу снижения большого количества обращений в БД, а не одного единственного на сущность.
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946059
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Дмитрий Мух
А в Set она зачем? Просто кладём актуальные данные в кэш.


Так, погоди.

Дмитрий Мух
Когда происходят операции типа "по случаю карантина всем скидос увеличивает на 10%", тогда иначе.

Например делаем, чтобы какой-то хэш в ключе кэширования сменился, следовательно по ключу в кэше уже ничего находится не будет и он заполнится актуальными данными.


Т.е. мы должны реализацию кеша менять? А если это просто аспект?

Зачем реализацию кэша менять? И почему именно кэша?
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946061
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух,

Тот же EF, конечно кладёт сущность в кеш при записи. Но это кеш первого уровня, вполне логично.
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946063
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Просто у тебя, получается, изменение обязательно кладёт сущность в кеш.

Если мы кэшируем сущности определённого типа, то да изменение отдельной сущности попадает в кэш.

Что не так?
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946064
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух
Зачем реализацию кэша менять? И почему именно кэша?


Ну я беру репо, меняю сущность, сохраняю в БД. Это же единственная точка для изменения данных.

Блин, всё равно непонятно. Понятно, что это работать будет, непонятно зачем.
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946065
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух
hVostt
Просто у тебя, получается, изменение обязательно кладёт сущность в кеш.

Если мы кэшируем сущности определённого типа, то да изменение отдельной сущности попадает в кэш.

Что не так?


Смысл какой? Глобально кешируется чтение, а не запись. Запись инвалидирует. Зачем тут отступать и содержать две разных базовых логики?
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946066
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Кеш решает задачу снижения большого количества обращений в БД, а не одного единственного на сущность.

Ну у нас большое количество сущностей определённого типа, к ним часто обращаются, мы их кэшируем и решаем "задачу снижения большого количества обращений в БД" :)
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946067
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух
hVostt
Кеш решает задачу снижения большого количества обращений в БД, а не одного единственного на сущность.

Ну у нас большое количество сущностей определённого типа, к ним часто обращаются, мы их кэшируем и решаем "задачу снижения большого количества обращений в БД" :)


Так это конкретный кейс, точечная оптимизация. Хотя непонятно, какого профита вы достигаете. Если вы уберёте запись в кеш при изменении, будет ли деградация ощутима и будет ли она вообще?
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946068
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Дмитрий Мух
Зачем реализацию кэша менять? И почему именно кэша?


Ну я беру репо, меняю сущность, сохраняю в БД. Это же единственная точка для изменения данных.

Да, единственная. И она завёрнута в простой кэш Декоратор :)
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946069
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух
Да, единственная. И она завёрнута в простой кэш Декоратор :)


В общем вы из первого уровня кеша сделали второй )
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946070
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Хотя непонятно, какого профита вы достигаете.

Меньше обращений к БД, не надо лепить блокировки.
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946071
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Дмитрий Мух
Да, единственная. И она завёрнута в простой кэш Декоратор :)


В общем вы из первого уровня кеша сделали второй )

Да, это кэш второго уровня.
Хочется, чтобы все машины в ферме получали актуальные данные, минуя БД, и как можно быстрее.
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946072
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
mayton
В других случаях расчет хеша может быть затруднительным.


Так е-таг можно и время записать, и вообще что угодно, это не обязательно должен быть именно хеш :)

Да можно. Можно туда просто ложить sequence.
...
Рейтинг: 0 / 0
Вопрос по кешированию
    #39946073
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но схема с стандартной хеш функцией интересна тем что клиент и сервер ее могут
вычислить независмо друг от друга и тогда протокол может быть (теоретически)
вообще без передачи документа.

Вот такой уровень секретности
...
Рейтинг: 0 / 0
25 сообщений из 93, страница 3 из 4
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Вопрос по кешированию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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