|
|
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
hVostt Дмитрий Мух Ну к примеру не лепить блокировки :) Да и просто исключить лишнее обращение к БД. Ну ведь это только на самых банальных, чисто учебных примерах так. В реальных приложениях есть проекции данных, которые кешируются. Например, скидка, которая рассчитывается из множества данных, размещённых в разных агрегатах. Какой толк от этой реализации? Инвалидация нужна. в реальных приложениях есть и то, о чём я пишу, и то, о чём ты... и во втором случае именно инвалидация происходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 20:56 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
sergq Максимум что скудный умишко подсказывает — ставить в редисе ttl записи минут 20. В итоге запись протухнет через 20 минут и при следующем запросе данные подскребутся с базы Есть еще одна схема кеширования. Если твоя БД легко трекает дату изменения документа (легче чем формирование его в response) то можно сделать такой вот тег в запросе. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since Но это потребует от клиента хранения времени актуальности последнего обращения ну и трекать коды 200 и 304 соотв. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 20:59 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
Дмитрий Мух в реальных приложениях есть и то, о чём я пишу, и то, о чём ты... и во втором случае именно инвалидация происходит В твоём примере кода нет важной проверки, что ты не должен делать Set, если данных в кеше нет. Так и должно быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:01 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
Дмитрий Мух, Всё же, запись в кеш при изменении, даёт реальный боевой профит? Понимаю, что вроде как нет лишнего запроса в БД, но один лишний запрос не является проблемой, важно поддержать все остальные тысячи запросов, а не один несчастный запрос ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:03 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
mayton Есть еще одна схема кеширования. Если твоя БД легко трекает дату изменения документа (легче чем формирование его в response) то можно сделать такой вот тег в запросе. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since Но это потребует от клиента хранения времени актуальности последнего обращения ну и трекать коды 200 и 304 соотв. Лучше ETag использовать, вроде. Жаль, что разработчики АПИ очень редко поддерживают эти теги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:04 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
hVostt Дмитрий Мух в реальных приложениях есть и то, о чём я пишу, и то, о чём ты... и во втором случае именно инвалидация происходит В твоём примере кода нет важной проверки, что ты не должен делать Set, если данных в кеше нет. Так и должно быть? Есть такая проверка: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:11 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
hVostt mayton Есть еще одна схема кеширования. Если твоя БД легко трекает дату изменения документа (легче чем формирование его в response) то можно сделать такой вот тег в запросе. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since Но это потребует от клиента хранения времени актуальности последнего обращения ну и трекать коды 200 и 304 соотв. Лучше ETag использовать, вроде. Жаль, что разработчики АПИ очень редко поддерживают эти теги. Да это хороший вариант когда идет тесная дружба фронта с Amazon-S3. Там все ресурсы независимо от разработки уже имеют расчетное поле md5 и его остается только взять из атрибута объекта и передать в responce. В других случаях расчет хеша может быть затруднительным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:17 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
Дмитрий Мух Есть такая проверка: Так это проверка в Get, а не в Set. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:19 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
mayton В других случаях расчет хеша может быть затруднительным. Так е-таг можно и время записать, и вообще что угодно, это не обязательно должен быть именно хеш :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:20 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
hVostt Дмитрий Мух Есть такая проверка: Так это проверка в Get, а не в Set. А в Set она зачем? Просто кладём актуальные данные в кэш. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:21 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
Дмитрий Мух А в Set она зачем? Просто кладём актуальные данные в кэш. Так, погоди. Дмитрий Мух Когда происходят операции типа "по случаю карантина всем скидос увеличивает на 10%", тогда иначе. Например делаем, чтобы какой-то хэш в ключе кэширования сменился, следовательно по ключу в кэше уже ничего находится не будет и он заполнится актуальными данными. Т.е. мы должны реализацию кеша менять? А если это просто аспект? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:22 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
Дмитрий Мух, Просто у тебя, получается, изменение обязательно кладёт сущность в кеш. А нафига она там в любом случае? Массовые изменения тоже будут заполнять кеш? В общем, профит до сих пор непонятен. Кеш решает задачу снижения большого количества обращений в БД, а не одного единственного на сущность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:24 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
hVostt Дмитрий Мух А в Set она зачем? Просто кладём актуальные данные в кэш. Так, погоди. Дмитрий Мух Когда происходят операции типа "по случаю карантина всем скидос увеличивает на 10%", тогда иначе. Например делаем, чтобы какой-то хэш в ключе кэширования сменился, следовательно по ключу в кэше уже ничего находится не будет и он заполнится актуальными данными. Т.е. мы должны реализацию кеша менять? А если это просто аспект? Зачем реализацию кэша менять? И почему именно кэша? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:25 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
Дмитрий Мух, Тот же EF, конечно кладёт сущность в кеш при записи. Но это кеш первого уровня, вполне логично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:25 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
hVostt Просто у тебя, получается, изменение обязательно кладёт сущность в кеш. Если мы кэшируем сущности определённого типа, то да изменение отдельной сущности попадает в кэш. Что не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:26 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
Дмитрий Мух Зачем реализацию кэша менять? И почему именно кэша? Ну я беру репо, меняю сущность, сохраняю в БД. Это же единственная точка для изменения данных. Блин, всё равно непонятно. Понятно, что это работать будет, непонятно зачем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:26 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
Дмитрий Мух hVostt Просто у тебя, получается, изменение обязательно кладёт сущность в кеш. Если мы кэшируем сущности определённого типа, то да изменение отдельной сущности попадает в кэш. Что не так? Смысл какой? Глобально кешируется чтение, а не запись. Запись инвалидирует. Зачем тут отступать и содержать две разных базовых логики? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:27 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
hVostt Кеш решает задачу снижения большого количества обращений в БД, а не одного единственного на сущность. Ну у нас большое количество сущностей определённого типа, к ним часто обращаются, мы их кэшируем и решаем "задачу снижения большого количества обращений в БД" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:29 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
Дмитрий Мух hVostt Кеш решает задачу снижения большого количества обращений в БД, а не одного единственного на сущность. Ну у нас большое количество сущностей определённого типа, к ним часто обращаются, мы их кэшируем и решаем "задачу снижения большого количества обращений в БД" :) Так это конкретный кейс, точечная оптимизация. Хотя непонятно, какого профита вы достигаете. Если вы уберёте запись в кеш при изменении, будет ли деградация ощутима и будет ли она вообще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:30 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
hVostt Дмитрий Мух Зачем реализацию кэша менять? И почему именно кэша? Ну я беру репо, меняю сущность, сохраняю в БД. Это же единственная точка для изменения данных. Да, единственная. И она завёрнута в простой кэш Декоратор :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:31 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
Дмитрий Мух Да, единственная. И она завёрнута в простой кэш Декоратор :) В общем вы из первого уровня кеша сделали второй ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:33 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
hVostt Хотя непонятно, какого профита вы достигаете. Меньше обращений к БД, не надо лепить блокировки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:33 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
hVostt Дмитрий Мух Да, единственная. И она завёрнута в простой кэш Декоратор :) В общем вы из первого уровня кеша сделали второй ) Да, это кэш второго уровня. Хочется, чтобы все машины в ферме получали актуальные данные, минуя БД, и как можно быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:35 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
hVostt mayton В других случаях расчет хеша может быть затруднительным. Так е-таг можно и время записать, и вообще что угодно, это не обязательно должен быть именно хеш :) Да можно. Можно туда просто ложить sequence. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:36 |
|
||
|
Вопрос по кешированию
|
|||
|---|---|---|---|
|
#18+
Но схема с стандартной хеш функцией интересна тем что клиент и сервер ее могут вычислить независмо друг от друга и тогда протокол может быть (теоретически) вообще без передачи документа. Вот такой уровень секретности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2020, 21:37 |
|
||
|
|

start [/forum/topic.php?fid=33&msg=39946049&tid=1547108]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 259ms |
| total: | 422ms |

| 0 / 0 |
