Рубрики
Без рубрики

Как создать LinkedIn-подобные реакции с без сервера Redis

Производственная реализация ликоподобных реакций с использованием Redis. Tagged с WebDev, JavaScript, Tutorial, Database.

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

Я запускаю еженедельную рассылку и часто получаю отзывы от рекрутеров по электронной почте или DMS LinkedIn.

Я думал, что могу попытаться собрать обратную связь, используя функцию «Реакции», как и LinkedIn или Facebook. Это не так информативно, как персонализированные сообщения, но это простая функция, которая может побудить больше людей предоставить некоторые общие отзывы.

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

Этот урок посвящен реализации функции, которая будет использоваться в реальной жизни в моем проекте.

Планирование

Как и в случае с любой функцией или проектом, мы начинаем с фазы планирования.

Я собираюсь придерживаться ликоподобных реакций, потому что они более подходят для типа контента, который я публикую.

Я буду использовать подобные, проницательные и любопытные реакции и заменим их 👍, 💡 и 🤔 эмодзисами соответственно.

Мой статический сайт построен с Gatsby. Я не использую базу данных Но мне нужен один, чтобы хранить реакцию. Мне нужно решить, какую базу данных использовать.

Я развертываю с NetLify и использую функции для функциональности, связанных с бэкэнд. Это означает, что я иду без сервера. В идеале мне нужна база данных без серверов, чтобы не иметь дело с развертыванием моего собственного DB или переплаты за PAAS с фиксированными планами.

На момент написания этой статьи я использую бесплатный уровень NetLify и могу легко использовать больше функций с платным планом по очень хорошей цене. Использование базы данных по разумной цене было бы идеальным дополнением к моему текущему техническому стеку.

Это задачи:

1. Варианты исследовательской базы данных.

Мне нужно выяснить, какие базы данных без серверов существуют, и выбрать их.

2. Создайте бэкэнд без сервера с функциями для:
  • хранение реакций и увеличение/уменьшение количества
  • получение реакций по посту i d
3. Создайте компонент «реакции».

Гэтсби основан на React, и я построю простой компонент «реакции».

4. Составьте все это, чтобы сделать мой статический сайт немного динамичным.

Статические веб -сайты могут иметь динамические функции, и это то, что делает их, статические генераторы сайтов столь невероятно удивительны.

В этом уроке я сосредоточусь на первых двух задачах. Реализация компонента «реакции» вы можете проверить в исходный код

Исследовать

Этот второй этап жизненного цикла разработки программного обеспечения (SDLC) называется прототипированием, но я называю это исследованием в этом учебном пособии, потому что я пропущу деталь подтверждения концепции (POC).

Исследования всегда веселые, потому что это дает прекрасную возможность узнать о новых технологиях. Хотя этот процесс интересен, это также может занять много времени, если мы не сделаем наше исследование более конкретным.

SQL и NOSQL являются наиболее распространенными типами баз данных. Выбор не сложно, если мы знаем, какие данные будут храниться. Давайте быстро посмотрим, какая структура данных у нас будет.

Каждый Пост имеет набор реакций И нам нужно считать те реакции Анкет

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

Основываясь на вышеизложенном, наша структура данных может выглядеть следующим образом для поста с 3 лайками, 12 проницательными и 7 любопытных реакциями: {"like": 3, "проницательный": 12, "любопытный": 7}

База данных NOSQL выглядит как хороший выбор для хранения и манипулирования структурой данных, такой как вышеуказанное.

Я сразу подумал о Mongodb и Redis. Однако, основываясь на том, как мы будем манипулировать данными, а именно сохранять их один раз, а затем увеличить или уменьшить определенные значения, я решаю в пользу Redis.

Причина в том, что Redis имеет встроенные и оптимизированные команды, чтобы поддержать то, что нам нужно.

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

Обратите внимание, что мы используем Redis в качестве Основная база данных Анкет Redis можно настроить для записи данных на диск, который обеспечивает степень Безопасность данных сравнимо с тем, что предлагает PostgreSQL.

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

Мне нравится этот апташ позволяет настойчивость По умолчанию хранит данные как в памяти, так и на диске. Это устраняет головную боль настройки вещей, которые были бы накладными расходами для такой задачи, как эта. Вот почему я всегда использую Serverless и PaaS, когда это возможно.

Подводя итог, позвольте мне поделиться с вами интересным Бесплатная электронная книга называется «Redis in Action», упакованная ценной информацией и использованием Redis.

БЕРЕВНАЯ БЕЗПЕКТА

Я буду использовать функции NetLify без сервера с узлом вместо создания собственного бэкэнда. Вы можете использовать любую бэкэнд -архитектуру.

Самый простой способ соединить Redis с Upstash – это использовать Redis-client Как описано Здесь Анкет

Перво -наперво, нам нужно создать базу данных без серверов Redis после этого Руководство по началу работы Анкет

Пожалуйста, обратите внимание, что я оставляю Сильный режим согласованности , потому что возможная последовательность подходит для моей задачи.

Это схема для названия ключей: post: {id}: {реакция}

  1. post: {id}: как -> Пост: 856f9d0a: нравится
  2. post: {id}: проницательный -> Пост: 856f9d0a: проницательный
  3. Post: {id}: любопытный -> Пост: 856f9d0a: любопытный

Мы могли бы пойти с самым основным видом стоимости Redis, известного как Строки Анкет Но мы пойдем с хэш Потому что мы хотим хранить объекты как ценность, и это целесообразно Используйте хэши, когда это возможно Анкет

Вот как мы делаем это для данного идентификатора поста:

  • Чтобы увеличить реакцию на 1, например, «как», мы будем использовать Hincrby командование Если ключ не существует, он создаст ключ и установит свое значение 0 до увеличения. Если ключ существует, он просто увеличит значение, которое мы предоставляем. Это позволяет нам повторно использовать эту функцию как для создания, так и для обновления реакций.

Hincrby Post: 856f9d0a: реакции, такие как 1

Вот реализация

Если бы нам пришлось уменьшить реакции для случаев, когда реакция удаляется или изменяется, мы просто передали бы значение, которое будет увеличено на отрицательное число: -1

  • Чтобы прочитать реакции для идентификатора сообщения, мы будем использовать Hgetall Команда, которая возвращает пары клавишных значений:

Hgetall Post: 856f9d0a: реакции -> //вернется {"like": "3", "проницательный": "1", "любопытный": "2"}

Вот реализация

С таким подходом, зная идентификатор поста, мы можем эффективно установить, обновить и получить реакции для поста с смехотворно небольшим количеством кода.

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

Но вы всегда должны помнить, что наряду с чтением схемой именования ключей вам необходимо контролировать длину ключей. Длинные клавиши могут использовать больше памяти и даже вызывать последствия для производительности, как описано в Redis Keys раздел.

Не по теме

Несмотря на то, что это не связано с этим уроком, я знаю, что позже я захочу показать самые популярные посты, основанные на реакциях.

Чтобы получить посты с наибольшим количеством лайков, проницательных и любопытных реакций, нам нужно отслеживать их, используя отсортированный набор .

Например, именно так мы храним пост, который получил такую же реакцию: Zincrby Реакция: как 1 Пост: 856F9D0A

И вот как мы получаем самые любимые 5 постов: Zrevrangebyscore Реакция: как +inf -Inf с ограничениями, предел 0 5

Я предоставлю более подробную информацию и рабочую реализацию в одном из моих следующих сообщений.

Всегда полезно разработать систему, учитывая все известные будущие требования и выбрать технологии, которые будут поддерживать их в будущем.

Вот работающая реализация на моем Веб -сайт Анкет Выберите любой Пост И вы найдете реакции внизу. Исходный код, который вы можете найти здесь

Вывод

Если вы все еще воспринимаете Redis как кэш в памяти, будьте готовы, потому что у меня есть больше постов, которые появляются в этой обложке, поддерживаемых этой удивительной базой данных.

Следующий пост будет о том, как я построил доску вопросов и ответов для задания и разжигания самых интересных вопросов с помощью Redis.

Следуйте за большим!

Оригинал: “https://dev.to/sandorturanszky/how-to-create-linkedin-like-reactions-with-serverless-redis-4cad”