@romany4

Как правильно извлечь данные из bitmap-a redis?

Допустим есть итоговый ключ в redis из 0\1 (bitmap).
1 -товар подошел условию, 0 - нет.
Позиция 0\1 означает id товара.
50000 товаров.
Как правильно извлечь позиции товаров, которые подошли под условия?
$ar = [];
for($i = 0; $i < 50000; $i++){
  if ($redis->getBit('test', $i) == 1){
    $ar[] = $i;
  }
}


Но этот код явно попахивает)) Поэтому подскажите наиболее правильное решение или направление.
  • Вопрос задан
  • 342 просмотра
Решения вопроса 1
@romany4 Автор вопроса
for ($i = 0; $i < $len; $i++){
  $tmp = ord($string[$i]);
  for($j=0; $j<8; $j++){
    $result[] = (($tmp & (1 << $j)) != 0);
  }
}


покурил маны и остановился на этом решении.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
50000 раундтрипов к редису от php на каждый запрос страницы - это сильно )
просто забираете один раз из редиса весь ключ 'test', а дальше битовая арифметика вам в помощь.
Ответ написан
$redisProducts = $redis->get('test');

$ar = [];
for($i = 0; $i < 50000; $i++){
    if ($redisProducts & pow(2, $i)){
        $ar[] = $i;
    }
}


php.net/manual/ru/language.operators.bitwise.php
Ответ написан
Ваш ответ на вопрос

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

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