@obvilion

Поиск по определенным значениям в ключах в Memcacmed?

Здравствуйте, помогите пожалуйста.
Имеются данные, которые хранятся в memcached:
data[1] = ['user_id' => 1, 'login' => 'admin', 'date' => 12121212];
data[2] = ['user_id' => 999, 'login' => 'user', 'date' => 5555555];
data[3] = ['user_id' => 50, 'login' => 'polzovatel', 'date' => 233333];
Мне требуется узнать, в каком массиве из вышеперечисленных дата самая наибольшая (она в unix time) - то есть, надо найти массив, в котором действие совершалось позже всех. Как ието сделать?
  • Вопрос задан
  • 90 просмотров
Решения вопроса 2
dimonchik2013
@dimonchik2013
non progredi est regredi
никак
искать по значениям нельзя, кроме как перебрать все ключи

юзай Mongo или Aerospike
Ответ написан
Комментировать
@Fortop
Tech/Team lead
Предыдущий "отвечатель" не прав.

Узнать в каком ключе лежит самая большая дата - можно.

Для этого всего лишь нужно вместе с сохранением массива не забывать выполнять

<?php
// $m = new Memcached();
// $key - это ключ для данных 
// вида ['user_id' => 1, 'login' => 'admin', 'date' => 12121212]; 
// которые мы сохраняли строкой выше по коду
do {
    $info = $m->get('latest', null, Memcached::GET_EXTENDED) 
    // результат не найден - значит мы первые
    if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
        $m->add['latest', $key);
    // результат найден и дата меньше чем у нового набора данных
    } elseif ($m->getResultCode() == Memcached::RES_SUCCESS) && $info['value']['date'] < $data['date']) {
        $m->cas('latest',$key, $info['cas']);
    ]
} while ($m->getResultCode() != Memcached::RES_SUCCESS)

?>


Дальше там где мы хотим узнать какой из ключей содержит самое позднее действие, то делаем
<?php

$key = $m->get('latest');
$mostLatestData = $m->get($key);

?>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы