Redis Hackathon Submission: «Fauxrem», переделка Forem с использованием Redis в качестве единственного хранилища данных


Обзор моей работы

Для Redis Hackathon я переделал часть Forem, программного обеспечения, с помощью которого работает этот сайт. Я назвал его «Fauxrem» (произносится как «фо-рем»), потому что это поддельная версия Forem. Код доступен на GitHub по лицензии MIT, и вы можете посмотреть демо-версию приложения, работающего на Heroku.

Некоторые из функций:

  • Учетные записи пользователей
  • Аутентификация
  • Постинг
    • Черновики против опубликованных постов
    • Теги
    • Комментирование (хотя в настоящее время нет потокового комментирования)
    • Нравится
    • Список для чтения
    • Уведомления о лайках/комментариях
  • Пользователи могут следить за пользователями
  • Пользователи могут следить за тегами
  • Лента
    • Как и в случае с Forem, лента для зарегистрированных пользователей немного отличается от ленты, показываемой анонимным пользователям.
    • В ленте, показываемой анонимным пользователям, отображается контент с наивысшей оценкой за время существования ленты (последние несколько недель), при этом «наивысшая оценка» основывается на:
      • количество времени, которое люди потратили на просмотр вашего сообщения
      • количество комментариев
      • количество «лайков».
    • Ваша персонализированная лента содержит сообщения только от пользователей, за которыми вы следите, и тегов, за которыми вы следите, в обратном хронологическом порядке.
    • Вы можете отключать слова из вашей ленты, поэтому если в ней слишком много контента, который вам не нужен (например, если вы не являетесь разработчиком JavaScript), вы можете активно отфильтровывать эти термины.
  • Полнотекстовый поиск
    • Включает расширенный поиск (например, author:jgaskins title:redis body:hackathon для поиска моих сообщений, у которых есть «redis» конкретно в заголовке и «hackathon» конкретно в теле), который Forem не поддерживает после удаления Elasticsearch.
  • Роли модератора/админа
    • Модерация
      • Пользователи могут сообщать о сообщениях
      • Модераторы могут не публиковать сообщения в ответ на сообщение или вообще игнорировать сообщение.
    • Администрирование
      • Банить пользователей
      • Редактирование статических страниц
  • Ограничение скорости для смягчения следующих проблем:
    • Скраппинг ботов, большая проблема для сайтов с контентом
    • Нагрузка на базу данных Redis
    • Манипулирование рейтингами постов

Модули Redis

  • RediSearch обеспечивает все запросы к нескольким сущностям, включая полнотекстовый поиск.
    • Также, я полагаю, что если вы используете Redis Enterprise, вы можете искать по всему кластеру, поэтому если у вас есть кластер, вам нужно изменить только одну строчку кода, чтобы использовать адаптер Cluster.
  • RedisJSON используется для хранения сущностей Post, User и Comment, что позволяет выполнять атомарное обновление, а не цикл fetch-mutate-persist.
  • RedisTimeSeries для хранения/запроса метрик о том, как работает ваш контент.

Категория «Представление

Причудливые дикие символы

Используемый язык

Crystal, использую собственный клиент Redis.

Ссылка на код

jgaskins / fauxrem-redis

Заявка на Redis/DEV Hackathon 2022

Fauxrem (клон Forem с использованием Redis)

Это проект, который я создал для Redis Hackathon 2022. Это клон Forem, использующий в качестве хранилища данных исключительно Redis.

Обзорное видео (необязательно)

Вот короткое видео, которое объясняет проект и то, как в нем используется Redis:

[Вставьте сюда свое собственное видео, а видео ниже удалите].

Как это работает

Как хранятся данные:

Данные для таких сущностей, как пользователи, посты, комментарии и некоторые другие, хранятся в виде JSON объектов с помощью RedisJSON. Большинство из них хранятся в ключе формата #{entity_type}:#{entity_id}, например, пользователь с id jamie будет храниться в ключе user:jamie.

  • Пользователи
    • id : Строка
      • Эквивалентно полю username в Forem — нам не нужен числовой идентификатор.
    • имя : Строка
  • Посты
    • id : Строка
      • хранится как #{author_id}-#{parameterized_title}-#{random_noise}
      • пример: jamie-hello-world-ad142c
    • автор : строка
      • id пользователя, который…
Посмотреть на GitHub

Дополнительные ресурсы / информация

  • Язык программирования Crystal
  • Мой собственный клиент Crystal Redis, поддерживающий кластеризацию Redis, а также различные модули Redis, такие как RedisJSON, RediSearch, RedisTimeSeries и RedisGraph.
  • Armature, используемый веб-фреймворк (который также использует Redis для хранения сессионных данных)
  • Шард markd от @icyleaf обеспечивает парсинг Markdown.

Скриншоты

Фид

Уведомления

Пользователи могут искать теги и следовать за ними

Аналогично, пользователи могут искать других пользователей и следовать за ними

Сообщения

Сообщайте о сообщениях о злоупотреблениях/спаме. Каждое сообщение имеет раздел «отчет» внизу под комментариями.

Модераторы могут читать эти отчеты и либо не публиковать пост, либо игнорировать отчет.

Администраторы могут добавлять статический контент, используя Markdown. Они выглядят как посты, но не отображаются в ленте. Их можно использовать для добавления навигационных ссылок (пока не реализовано), аналогично боковой панели на DEV.

Коллабораторы

Нет


  • Посмотрите Redis OM, клиентские библиотеки для работы с Redis как многомодельной базой данных.
  • Используйте RedisInsight для визуализации данных в Redis.
  • Подпишитесь на бесплатную базу данных Redis.

Оцените статью
devanswers.ru
Добавить комментарий