Доброго времени! Хочу спросить совета по поводу хранения данных в redis как это сделать быстрее и оптимальней в плане кода и быстродействия php и самого Редиса. Дано - база с пользователями в таблице пользователей пордка 3х тысяч строк и количество может быть расширенно до 10. у каждого пользователя есть 7-10 параметров которые надо записать в редис и работать с ними, обращения к хранимым данным будут происходить довольно часто. изменение, перезапись запись.
первый способ который мне видится это хранить массив преобразованный в формат json по принципу 1 пользователь = 1 ключ примерно так:
допустим массив данных
$superparms['1'] = "13";
$superparms['2'] = "22";
$superparms['3'] = "55";
$superparms['4'] = "66";
ключ для хранения составляем строка+id пользователя
$key = 'user'.$id; //допустим user922
и запись
$superparms = json_encode($superparms);
$redis->set($key, $superparms);
$redis->expire($key, '600');
в таком случае в редис под каждым ключом хранится примерно такая строка {"1":"13","2":"22","3":"55","4":"66"}
и естественно при работе с ним придется каждый раз выгружать все данные, даже если надо изменить какой либо один параметр (чаще всего параметры меняются именно по отдельности за раз) делаю примерно так:
$curent = $redis->get($key);
$curent = json_decode ($curent);
foreach ($curent as $key => $value) {
//обрабатываем все и перезаписываем та же все
}
смущает в этом способе то что хоть и используется минимум ключей и все хранится компактно - все равно каждый раз приходится вереберать весь массив данных - можно ли как то без обратного преобразования json decode менять на прямую данные в строке json?
и втрой вариант это для каждого параметра создавать свой ключ по конструкции: строка+id+_+номер параметра примерно будет так
$redis->set('user921_1', $superparms[0]);
$redis->expire('user921_1', '600');
$redis->set('user921_2', $superparms[1]);
$redis->expire('user921_2', '600');
$redis->set('user921_3', $superparms[2]);
$redis->expire('user921_3', '600');
и т.д таким образом количество ключей возрастает раз в 10 но работать с ними становится проще т.к. избавляемся от json encod\decode и циклов foreach для перебора, но мне кажется из-за большого количества ключей в системе может создаваться загруженность? так ли это? какой способ наиболее быстрый в плане обработки php и хранения в redis? есть ли еще варианты решения такой задачи?
Redis это не только ключ-значение, но и пачка других типов данных и соответствующих методов обработки набора значений, отсортированного списка значений, географических данных, хэш-таблиц
Под вашу задачу вполне подойдёт хэш-таблица. Посмотрите на используемую у вас библиотеку доступа к редису, для php redis ваша задача сводится к методам hMSet, куда сразу PHP-массив передать, hGetAll для получения массива обратно и hSet для редактирования полей по отдельности. И ещё кучка методов для возможной работы с этими данными непосредственно в redis.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Данный код рисует сетку календаря, календарь рисуется на месяцВыбираются все данные за этот месяц (если есть такие) и при наличии данных в базе...
В общем пишу api для граббинга m3u8, есть функция которая отдает ссылку на файл, ссылка в таком виде
Разбираю указатели на функции,и решил реализоватьФункция, сама по себе простенькая, подсчет количества слов в строке