Статьи

Великое заблуждение Redis: Redis не является базой данных

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