@zaart

Как идентифицировать уникальные ключи Memcached?

Здравствуйте!

Изучаю Memcached и, вроде, все пока получается. Но появился вопрос, как идентифицировать уникальные ключи?

Ну вот, например, у меня есть запрос к бд, который возвращает кол-во попыток определенного пользователя:

Код

if (class_exists('Memcached')) {
    $ttl = 3600;
    $cache = new Memcached();
    $cache->addServer("127.0.0.1", 11211);
    if(($cache->get('num_att')) != null) {

        $total_count = $cache->get('num_att');

    } else {
        $sql = "SELECT * FROM sub_all WHERE user_id IN (?)";
        if ($query = $db->prepare($sql)) {
            $query->bind_param("i", $id);
            $query->execute();
            $result = $query->get_result();
            $exist = $result->num_rows;
            $total_count = $result->fetch_array();
            $cache->set('num_att', $total_count, $ttl);
        } else {
            $errBox = 'Ошибка. Пожалуйста, повторите попытку.';
            $stop_error = true;
        }

    }
}else {
    die("Ошибка при подключении к кеш-серверу");
}



И сейчас кеш работает, но он вернет всем пользователям один результат, а мне надо чтоб у каждого было свое.

У меня была идея хэшить ключи, но как их потом проверять, как хранить?

Поделитесь, пожалуйста, своими решениями этой проблемы.
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
kotomyava
@kotomyava
Системный администратор
У вас есть id, его можно включить в название ключа. например "num_att_$id". И точно также при сохранении количества попыток этот же ключ использовать. Ничего не надо нигде дополнительно хранить.

Ключи можно удалять по префиксу, если нужно очистить этот кеш. Прямого функционала нет для этого в memcached, но есть обходные пути.

Кстати, проверять наличие кеша и выдавать ошибку не надо. Код должен работать и без него же. Тем более, что сообщение об ошибке явно некорректно - проверяется наличие модуля, а не подключение же. =) Надо просто правильно обернуть проверкой обращение к кешу.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы