redis — отображение значений меньше, чем $foo

#laravel #redis #timestamp

#laravel #redis #временная метка

Вопрос:

Я делаю простой новостной сайт в laravel. Я почти на месте, но я хотел бы добавить опцию «актуальные статьи» с помощью redis. Мой вопрос — есть ли в redis возможность отображать результаты со значением меньше переменной foo. Чтобы быть более точным, я добавил временную метку и идентификатор в хэш, и я хотел бы отображать только результаты с меткой времени-84600.

Есть идеи?

Ответ №1:

Лучший способ сделать это — также добавить их в отсортированный набор, а затем использовать zrangebyscore для доступа к ним.

Итак, вы бы добавили

 ZADD articletimes <time> articleID
  

в redis, а затем

 ZRANGEBYSCORE articletimes <time-84600> <time>
  

чтобы вернуть ваши результаты.

Комментарии:

1. хм, не уверен, что вы предложили .. так что лучший способ — использовать как хэши, так и отсортированный набор? Один из них будет действовать как какая-то сводная таблица?

2. Да, вы бы использовали отсортированный набор для получения articleId, а затем искали хэш, используя их. Если вы хотите уменьшить количество вызовов, вы могли бы создать Lua-скрипт на стороне redis, который выполняет обе операции одновременно, а затем возвращает результат.

3. Наконец-то я понял! И до полуночи: D Итак. То, что я сделал, это:

4. rrrr, не могу отредактировать предыдущее, нажал enter, и оно опубликовало:/ в любом случае, я создал хэшированный post_id с количеством просмотров и идентификатором и отсортировал заданные postTimes с метками времени, как вы предложили, вопрос, который я должен был задать, состоял в том, как ОТСОРТИРОВАТЬ оба набора! Итак, я сделал что-то вроде этого: sort postTimes by post_*->views get post_*->views DESC limit 0 3

5. снова введите, извините за это .. так что теперь мне нужно только выяснить, есть ли where опция в sort . То, что я забыл упомянуть в своем вопросе, заключалось в том, что я ищу два параметра одновременно: 3 сообщения на прошлой неделе с большинством просмотров