Redis не является базой данных.
Это ближе к memcache, чем mysql, например. Однако это тоже не кеш.
Это самая большая мысль, которую я хочу высказать в голове людей. По некоторым причинам, люди думают, что это хранилище значений ключей или какая-то постоянная база данных, но это совсем не так.
Я сам подумал об этом, и мне было трудно понять, почему это было полезно, так как это застряло в моей голове, так что, если вы думали, что это настойчиво, выкиньте это из головы сейчас!
Redis является сервером структуры данных
Это супер низкоуровневые вещи, такие как списки, наборы и, да, значение ключа, но это не главное.
Там нет ни одной убийственной чертой Redis. Лучший способ узнать его ценность — просто просмотреть документы на интересные вещи.
Вы чувствуете себя подобно малышу, играющему строительные блоки, но эти строительные блоки чертовски круты.
Он имеет некоторую постоянную поддержку, но не выглядит сверхпрочным. Если вы думаете об использовании таким образом, вы неправильно понимаете инструмент.
РЕДАКТИРОВАТЬ: Этот комментарий на постоянство был встречен большой критикой со стороны сообщества, поэтому я добавлю к этому: Redis может быть настроен для длительного хранения. Это выходит за рамки данной статьи, но документы очень четко описывают возможные конфигурации: http://redis.io/topics/persistence
Ниже приведены 3 примера использования Redis.
Leaderboards
Если вы разрабатываете таблицу лидеров, вам нужно использовать Redis. Один из немногих типов данных, которые он поддерживает, называется «отсортированные наборы», и, честно говоря, им следовало бы просто назвать проклятые вещи «списками лидеров».
Это патетически просто в использовании. Скажем, мы строим тетрис и хотим показать таблицу рекордов.
Каждый раз, когда пользователь получает оценку, используйте ZADD для добавления своей оценки в систему:
ZADD highscores 1337 dickeytk ZADD highscores 100 whatgoodisaroad
Теперь давайте возьмем топ-5 игроков, использующих ZRANGEBYSCORE :
ZRANGEBYSCORE highscores -inf +inf WITHSCORES LIMIT 0 5
Мне даже не нужно объяснять это. Это достаточно быстро для вас, на случай, если вы беспокоитесь.
Проверьте документы для получения дополнительной информации о отсортированных наборах.
Очередь
Вы можете сделать некоторые очень простые вещи с очередями с Redis. Я имею в виду очень простой, буквально одну строку кода почти на каждом языке программирования, я бы сказал.
Это работает так, как вы ожидаете.
Поместите что-нибудь в конец очереди:
RPUSH my_list 6
( RPUSH означает « поместить данные в правую часть списка»)
Возьмите следующую вещь в начале списка:
LPOP my_list
( LPOP означает «всплывающие данные с левой стороны списка»)
Тем не менее, общая проблема в веб-разработке заключается в том, что в вашей очереди ничего не может быть! В этом случае часто бывает полезно сделать что-то вроде этого:
data = None while not data: data = redis.('LPOP', 'mylist')
Просто зацикливайтесь, пока не получите свои данные. Тем не менее, есть лучший способ, используя BLPOP . BLPOP — это просто блокирующая версия LPOP:
data = redis.('BLPOP', 'mylist')
Который просто блокирует, пока не вернется! Маринуйте о том, насколько это полезно на секунду.
Пример кеширования!
РЕДАКТИРОВАТЬ: сообщество было очень расстроен по поводу этого раздела в моем сообщении. Я по-прежнему утверждаю, что это совершенно приемлемый способ обработки недействительности кэша, однако, если вы реализуете это в производственной системе, вам определенно необходимо тщательно прочитать http://redis.io/commands/keys . Тем не менее, даже если это не является предпочтительным по причинам производительности, это довольно круто!
Redis в значительной степени является заменой memcache. Если вы использовали memcache, у вас, вероятно, есть шаблон кэширования, использующий такие ключи:
post/83/body
или же
post/83
или, может быть, так
article:28:related_tags
По сути, вы используете пространства имен для тегов, чтобы они не конфликтовали. Молодец! Теперь, как вы, наверное, заметили, аннулирование не является легкой задачей, поскольку в memcache вы можете удалить
post/83
но это не удалит
post/83/body
поскольку это просто строка, memcache ничего не анализирует.
Теперь здесь Redis. Вы можете найти ключи на подстановочных знаках! Так что вы можете просто запросить это так:
keys post/83*
И это вернет все ключи, которые вам нужны для аннулирования!
Как отметил tabbyjabby на ycombinator, Antirez (один из создателей Redis) написал очень хорошую статью о многих из тех вещей, которые я обсуждал здесь: http://antirez.com/post/take-advantage-of-redis-adding -Он-к-ваш-stack.html
Источник: http://jeffdickey.info/the-great-redis-misapppresion