Це питання стосується кращих практик архітектури.
Наша сучасна архітектура
У мене клас PHP, який отримує доступ до MySQL для отримання інформації про користувачів. Давайте назвемо це User
. User
доступ до нього багато разів, тому ми реалізували шари кешування для зменшення навантаження.
Перший шар - це те, що ми називаємо кешем "на запит". Після отримання даних з MySQL ми зберігаємо їх у приватній власності User
. Будь-які наступні запити для даних повертають властивість замість того, щоб повторно запитувати дані з MySQL.
Оскільки веб-запит живе і вмирає на основі запиту, цей кеш лише перешкоджає додатку отримувати доступ до MySQL більше одного разу в одному запиті.
Наш другий шар - Memcached. Коли приватна власність порожня, ми спочатку перевіряємо Memcached на дані. Якщо Memcached порожній, ми запитуємо дані MySQL, оновлюємо Memcached та оновлюємо приватну власність User
.
Питання
Наш додаток - це гра, і іноді вкрай важливо, щоб деякі дані були якомога актуальнішими. Протягом приблизно п'яти хвилин запит на читання даних користувача може статися 10 або 11 разів; то може відбутися оновлення. Подальші запити на читання повинні бути оновлені, або механіки ігор не вдається.
Отже, що ми зробили, це реалізувати фрагмент коду, який виконується, коли відбувається оновлення бази даних. Цей код встановлює ключ у Memcached з оновленими даними, тому всі наступні запити до Memcached є актуальними.
Це оптимально? Чи є якісь занепокоєння щодо продуктивності чи інші "готчі", про які слід пам'ятати, намагаючись підтримувати такий "живий кеш", як це?