Это не что-то новое, но не в состоянии выбрать лучший подход для этого.
Это что-то похожее на стену в фейсбуке с лайками. Если зарегистрированному пользователю уже понравилась запись, покажите кнопку «Нравится» зеленым цветом или покажите ее серым цветом.
Вот два подхода, о которых я сейчас думаю
Для 40 сообщений, которые я показываю пользователю в одном представлении, получите Post_ids из 40 сообщений, а затем
1) Если я сохранил лайки в SET, используя что-то вроде
post # id: лайки userid1 userid2
Я могу написать скрипт Lua для запуска ISMEMBER для указанных выше 40 post_ids и получить результат для пользователя
2) Если я храню лайки в Hash, используя что-то вроде
user # id: лайки post_Id1 1 post_id2 1 ....
Здесь я сохраняю понравившийся post_id в качестве ключа в пользовательском хэш-наборе, а значением является какое-то фиктивное значение. При таком подходе теперь я могу теперь использовать HMGET user#id:likes post_id1 post_id28 ...
, чтобы увидеть, какие сообщения понравились пользователю в одной команде.
Могу ли я узнать, есть ли проблемы со вторым подходом? Это выглядит просто и легко. Также из этого документа
https://redis.io/topics/memory-optimization
это говорит
Используйте хэши, когда это возможно
Маленькие хэши закодированы в очень маленьком пространстве, поэтому вы должны попробовать
представление ваших данных с использованием хэшей каждый раз, когда это возможно. За
экземпляр, если у вас есть объекты, представляющие пользователей в веб-приложении,
вместо использования разных ключей для имени, фамилии, электронной почты, пароля,
используйте один хеш со всеми обязательными полями.
Если вы хотите узнать больше об этом, прочитайте следующий раздел.