Кэширование ключей с тегами в Redis, снижает производительность - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь кешировать привилегии пользователя. Дело в том, что все пользователи имеют определенные общие черты (теги). Поэтому, как только привилегия, соответствующая пользовательской функции (тегу), будет изменена, я намерен сделать недействительным кэш-память только тех пользователей, которые используют эту конкретную функцию (тег).

Я пробовал кэшировать с помощью тегов в Laravel с Redis. Это решает мою задачу, но производительность снижается для большого числа пользователей, что вызывает у меня серьезную обеспокоенность.

Есть ли альтернативный способ приблизиться к кешированию в Laravel, используя Redis для вышеупомянутого сценария?

1 Ответ

0 голосов
/ 13 ноября 2018

Как правило, пользователи не связаны напрямую с привилегиями / разрешениями. В типичных сценариях пользователи связаны с ролями, а роли связаны с разрешениями.

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

Почему кэширование отношений между пользовательскими привилегиями ухудшает производительность?

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

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

Надеюсь, это имеет смысл.

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

Смотри также: https://stackoverflow.com/a/42842077/7377984

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...