Yaponchick
Новичок
Здравствуйте.
Вопрос: Как правильно организовать функции кеширования?
Суть:
- Есть API резольвящий имена в ID, пример: ссылка
- Есть API резольвящий ID в имена, пример: ссылка
Пытаюсь сделать кеширование ID, Name локально в MySQL, чтобы не грузить апи/сайт, но запутался во внутренней зависимости + DRY. Данные от пользователя приходят в двух типах айди или нейм, поэтому:
Вариант №1:
получаем пугающую зависимость в cacheGetByNames()
Вариант №2:
получаем гарантированный запрос, если имя не существует...
Вариант №N: Может Вы подскажете?
P.S. Получается что мой вопрос: Кто должен сохранять данные в кеш: cacheGetByNames или byNames?
Вопрос: Как правильно организовать функции кеширования?
Суть:
- Есть API резольвящий имена в ID, пример: ссылка
- Есть API резольвящий ID в имена, пример: ссылка
Пытаюсь сделать кеширование ID, Name локально в MySQL, чтобы не грузить апи/сайт, но запутался во внутренней зависимости + DRY. Данные от пользователя приходят в двух типах айди или нейм, поэтому:
PHP:
function byNames($names = array()) { ... }
function byIDs($ids = array()) { ... }
function query($type, $argument, $data) { ... } # отправка запроса + парсинг хмл
function cacheGetByNames($names = array) { ... }
function cacheGetByIDs($names = array) { ... }
function cacheSave($id, $name) { ... } # сохранение в MySQL
PHP:
function byNames() {
cacheGetByNames()
}
function cacheGetByNames() {
if (not_cached_in_mysql) {
$ret = query(...);
cacheSave($ret);
} else {
$ret = get_from_mysql()
}
return $ret;
}
Вариант №2:
PHP:
function byNames($names) {
$ret = cacheGetByNames();
foreach ($names as $n) {
if (!isset($ret[$n]) {
$data = query(..., $n);
cacheSave($data);
$ret[$n] = $data;
}
}
}
Вариант №N: Может Вы подскажете?
P.S. Получается что мой вопрос: Кто должен сохранять данные в кеш: cacheGetByNames или byNames?