Этот код действительно неоптимальный, но структура правильная. У вас будет один ключ с телом поста и один список с постами каждого пользователя.
Теперь, чтобы оптимизировать его, я вижу два варианта.
- с использованием конвейерной обработки для запроса всех сообщений в одном и том же цикле.
- с использованием sort , что позволяет использовать более похожие на запросы команды.
Пример второго варианта:
redis> LPUSH uid:123:posts 1
(integer) 1
redis> LPUSH uid:123:posts 3
(integer) 2
redis> LPUSH uid:123:posts 5
(integer) 3
redis> LPUSH uid:123:posts 7
(integer) 4
redis> SET post:1 test1
OK
redis> SET post:2 test2
OK
redis> SET post:3 test3
OK
redis> SET post:5 test5
OK
redis> SET post:7 test7
OK
redis> SORT uid:123:posts DESC GET post:* LIMIT 0 100
1) "test7"
2) "test5"
3) "test3"
4) "test1"