Поддержание синхронизации потока операций Redis с исходным источником данных

У меня есть поток активности в моем веб-приложении, в котором используется настройка, почти идентичная описанной здесь: Как реализовать поток активности в социальной сети

Вкратце: структура данных в настоящее время состоит только из одной длинной денормализованной таблицы MySQL.

Вышеприведенный пост также предлагает возможность использования Redis в качестве кэша для последних 100 или около того действий для каждого пользователя. Я уже начал разрабатывать это таким образом, чтобы у каждого пользователя был список Redis с именем что-то вроде "uid:123:activity", а каждый элемент списка - это PHP-массив в формате json, сохраненный в виде строки. JSON содержит информацию, такую ​​как "user_id", "time", "photo_id" и т. Д.

Тем не менее, я, кажется, столкнулся с проблемой. Как я могу удалить действия из списка пользователей в Redis, если один из участников этого действия удален из приложения? Например, если кто-то, за кем вы следите, удаляет свою учетную запись, любые действия, связанные с ним, должны быть удалены из вашего потока. Я вижу два возможных подхода, ни один из которых не кажется фантастическим:

  1. Каждый раз, когда что-то удаляется, просматривайте все списки пользователей и элементы списка в поисках ссылок на него и, если оно существует, удалите его. (Это, вероятно, нереально)
  2. При создании Steam из списка, проверьте, существует ли элемент, и если он не обязательно удалить этот элемент из списка.

Многие люди предлагают использовать Redis для потоков деятельности, структурированных подобным образом, но я не видел проблемы синхронизации списка с исходным адресом источника.

Есть ли у кого-нибудь еще предложения, прежде чем я пойду по маршруту варианта 2?

1 ответ

Я один из авторов Stream-Framework и getstream.io. Наиболее распространенным подходом является:

1.) Fanout удаляет и удаляет их из каждого канала, а также:

2.) Добавить слой фильтрации во время чтения

Этот второй шаг полезен в случае, если люди отправляют недопустимый контент, у вас есть расширенные настройки конфиденциальности или по какой-то другой причине вы хотите быстро удалить данные.

Другие вопросы по тегам