11. Виджет — микроконтроллер внутри
контроллера
Возможность параметризации отображения
Легкое добавление / удаление
Возможность реализации бизнес-логики вне
вызывающего контроллера
36. Возможность выборки ключей по
шаблону
/widget/UserProfile/id/1/view/top'
/widget/UserProfile/id/1/view/review'
/widget/UserProfile/id/1/view/profile'
37. Возможность выборки ключей по
шаблону
/widget/UserProfile/user_id/1/view/top'
/widget/UserProfile/user_id/1/view/review'
/widget/UserProfile/user_id/1/view/profile'
Выбираем ключи по маске *user_id/1*
Удаляем найденные ключи:
38. — то, что надо!
Прост в установке
Есть модуль для nginx
Есть расширение для PHP
Данные хранятся в памяти, но при этом сохраняются и на
диск
Возможность выборки ключей по маске
40. Проблемы, проблемы...
Время выбора ключа по маске вырастает прямо
пропорционально количеству записей
Из-за возрастающей нагрузки Redis не успевает
обрабатывать коннекты, поэтому запросы скапливаются и
сайт перестает отвечать.
41. Избавляемся от поиска по маске
Используем помимо линейного хранения данных
именнованые неупорядоченные массивы (сеты),
содержащие ключи связанных виджетов
/widget/UserProfile/user_id/1/view/top
/widget/UserProfile/user_id/2/view/review
/widget/UserProfile/user_id/1/view/review
/widget/UserProfile/user_id/2/view/top
....
Как было:
user_1
/widget/UserProfile/user_id/1/view/top
/widget/UserProfile/user_id/1/view/review
....
user_2
/widget/UserProfile/user_id/2/view/review
/widget/UserProfile/user_id/2/view/top
....
....
Как стало
42. Запускаем несколько нод Redis,
используем Nutcracker
Nutcracker (Twinproxy) — прокси-балансировщик для
Redis
Репликация не нужна — каждая нода хранит свои данные.