Redis - только кеш?

Я читал некоторые документы Redis и пробовал учебник на http://try.redis-db.com/. До сих пор я не вижу никакой разницы между Redis и кеширующими технологиями, такими как Velocity или Cached Framework корпоративной библиотеки

Фактически вы просто добавляете объекты в хранилище данных в памяти с помощью уникального ключа. Кажется, что не существует какой-либо реляционной семантики...

Что мне не хватает?

Ответ 1

Нет, Redis намного больше, чем кеш.

Как и кеш, Redis сохраняет пары ключ = значение. Но в отличие от кеша, Redis позволяет вам управлять значениями. Существует 5 типов данных в Redis - Strings, Sets, Hash, Lists и Sorted Sets. Каждый тип данных предоставляет различные операции.

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

Предположим, мы хотим построить StackOverflow.com. Чтобы это было просто, нам нужны вопросы, ответы, теги и пользователи.

Вопросы моделирования, пользователи и ответы

Каждый объект может быть смоделирован как карта. Например, вопрос представляет собой карту с полями {id, title, date_asked, votes, ask_by, status}. Аналогично, ответ - это карта с полями {id, question_id, answer_text, answer_by, vote, status}. Аналогично, мы можем моделировать пользовательский объект.

Каждый из этих объектов может быть непосредственно сохранен в Redis как хэш. Чтобы создать уникальные идентификаторы, вы можете использовать команду атомарного инкремента. Что-то вроде этого -

$ HINCRBY unique_ids question 1
(integer) 1
$ HMSET question:1 title "Is Redis just a cache?" asked_by 12 votes 0
OK

$ HINCRBY unique_ids answer 1
(integer) 1
$ HMSET answer:1 question_id 1 answer_text "No, its a lot more" answered_by 15 votes 1
OK

Обработка голосов

Теперь, каждый раз, когда кто-то поднимает вопрос или ответ, вам просто нужно это сделать

$ HINCRBY question:1 votes 1
(integer) 1
$ HINCRBY question:1 votes 1
(integer) 2

Список вопросов для главной страницы

Затем мы хотим сохранить самые последние вопросы для отображения на домашней странице. Если вы пишете .NET или Java-программу, вы должны хранить вопросы в списке. Оказывается, это лучший способ сохранить это в Redis.

Каждый раз, когда кто-то задает вопрос, мы добавляем его идентификатор в список.

$ lpush questions question:1
(integer) 1
$ lpush questions question:2
(integer) 1

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

$ lrange questions 0 24
1) "question:100"
2) "question:99"
3) "question:98"
4) "question:97"
5) "question:96"
...
25) "question:76"

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

Вопросы по тегам, отсортированные по голосам

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

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

Давайте продолжим и сделаем это для тега Redis

$ zadd questions_by_votes_tagged:redis 2 question:1 
(integer) 1
$ zadd questions_by_votes_tagged:redis 10 question:2 
(integer) 1
$ zadd questions_by_votes_tagged:redis 5 question:613 
(integer) 1
$ zrange questions_by_votes_tagged:redis 0 5 
1) "question:1"
2) "question:613"
3) "question:2"
$ zrevrange questions_by_votes_tagged:redis 0 5 
1) "question:2"
2) "question:613"
3) "question:1"

Что мы здесь сделали? Мы добавили вопросы в отсортированный набор и связали счет (количество голосов) по каждому вопросу. Каждый раз, когда вопрос поднимается, мы увеличиваем его счет. И когда пользователь нажимает "Вопросы с тегами Redis, отсортированные по голосам", мы просто делаем zrevrange и возвращаем верхние вопросы.

Вопросы в реальном времени без обновления страницы

И, наконец, бонусная функция. Если вы сохраните открытую страницу вопросов, SO сообщит вам, когда будет добавлен новый вопрос. Как помочь Redis здесь?

В Redis есть модель pub-sub. Вы можете создавать каналы, например "channel_questions_tagged_redis". Вы затем subscribe пользователей на определенный канал. Когда будет добавлен новый вопрос, вы отправите publish сообщение на этот канал. Затем все пользователи получат сообщение. Вам нужно будет использовать веб-технологии, такие как веб-сокеты или кометы, чтобы фактически доставить сообщение в браузер, но Redis помогает вам со всей сантехникой на стороне сервера.

Стойкость, надежность и т.д.

В отличие от кэша, Redis сохраняет данные на жестком диске. У вас может быть настройка ведущий-ведомый, чтобы обеспечить лучшую надежность. Чтобы узнать больше, перейдите по темам Persistence and Replication здесь - http://redis.io/documentation

Ответ 2

Redis обладает уникальными способностями, такими как сверхбыстрые lua-скрипты. Его время выполнения равно выполнению команд C. Это также привносит атомарность для сложных манипуляций с данными Redis, необходимых для работы многих продвинутых объектов, таких как Замки и Семафоры.

В сетке данных памяти есть Redis, называемый Redisson, который позволяет легко создавать распределенное приложение на Java. Благодаря распределенным Lock, Semaphore, ReadWriteLock, CountDownLatch, ConcurrentMap объектам и многим другим.

Прекрасно работает в облаке и поддерживает AWS Elasticache, AWS Elasticache Кластер и Поддержка кэша Azure Redis

Ответ 3

Не просто кеш.

  • В памяти ключ-хранилище
  • Поддержка нескольких типов данных (строки, хэши, списки, наборы, отсортированные наборы, растровые изображения и гиперлоглоги)
  • Он предоставляет возможность хранить данные кэша в физическом хранилище (при необходимости).
  • Поддержка паб-под модель
  • Redis кеш обеспечивает репликацию для высокой доступности (ведущий/ведомый)

Ответ 4

На самом деле нет зависимости между относительным представлением данных (или любым типом представления данных) и ролью в базе данных (кеш, постоянное постоянство и т.д.).

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

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

Ответ 5

Redis - это кеш, который лучше всего подходит для распределенной среды/архитектуры микросервиса.

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

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

Ответ 6

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

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