Redis - это просто кэш?

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

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

Что я упустил?

4 ответов


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

как кэш, Redis хранит пары ключ=значение. Но в отличие от кэша, Redis позволяет работать со значениями. В Redis есть 5 типов данных-строки, наборы, хэш, списки и отсортированные наборы. Каждый тип данных предоставляет различные операции.

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

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

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

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

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

$ 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

Обработка Голоса

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

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

список вопросов для домашней страницы

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

каждый раз, когда кто-то задает вопрос, то добавить его ID в список.

$ 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 с помощью конвейерной линии и покажите их пользователю.

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

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

чтобы смоделировать это, мы используем функцию отсортированного набора 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"

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

вопросы в реальном времени без перезагрузки страницы

и наконец, призовая игра. Если вы держите страницу вопросов открытой, так будет уведомлять вас, когда новый вопрос будет добавлен. Как Рэдис помочь?

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

настойчивость, надежность etc.

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


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

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

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


не просто кэш.

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

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

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

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