Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Введение в Redis

Покупка
Новинка
Артикул: 825627.01.99
Доступ онлайн
1 000 ₽
В корзину
Краткий курс о сетевом журналируемом хранилище данных типа «ключ — значение» с открытым исходным кодом, нереляционной высокопроизводительной СУБД.
Сегуин, К. Введение в Redis : краткий курс / К. Сегуин. - Москва : ИНТУИТ, 2016. - 33 с. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2138306 (дата обращения: 04.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
К. Сегуин







Введение в Redis

                С.ИНТУ ИТ





    У НАЦИОНАЛЬНЫЙ ОТКРЫТЫЙ УНИВЕРСИТЕТ


Введение в Redis 2-е издание, исправленное Сегуин К.


Национальный Открытый Университет “ИНТУИТ”
2016


2

Введение в Redis/ К. Сегуин - М.: Национальный Открытый Университет “ИНТУИТ”, 2016
Краткий курс о сетевом журналируемом хранилище данных типа «ключ — значение» с открытым исходным кодом, нереляционной высокопроизводительной СУБД.
(c) ООО “ИНТУИТ.РУ”, 2016-2016
(c) Сегуин К., 2016-2016

3

            Введение

            Лицензия


The Little Redis Book (Маленькая книга о Redis) распространяется под лицензией Attribution-NonCommercial 3.0 Unported. Вы не обязаны платить за эту книгу.
Вы можете свободно копировать, распространять, изменять и публиковать книгу. Тем не менее, я прошу, чтобы вы всегда указывали мое, Карла Сегуина (Karl Seguin), авторство и не использовали книгу в коммерческих целях.
Полный текст лицензии вы можете найти по ссылка: ссылке -http://creativecommons.org/licenses/by-nc/3.0/legalcode.


            Об авторе


Карл Сегуин - разработчик, имеющий опыт работы в разных областях и с разными \linebreak технологиями. Активный участник проектов Открытого/Свободного ПО, технический \linebreak писатель и участник различных конференций. Является автором различных статей о Redis и нескольких утилит для работы с этой системой. На Redis работает система ранжирования и статистики на его бесплатном сервисе для разработчиков казуальных игр - ссылка: mogade.com.
Карл написал ссылка: The Little MongoDB Book - http://openmymind.net/2011/3/28/The-Little-MongoDB-Book, популярную бесплатную книгу о MongoDB.
Вы можете найти его блог по адресу ссылка: http://openmymind.net, а также следить за ним в Twitter: ссылка: http://old.intuit.ru/department/database/intredis/1/@karlseguin.


            Благодарности


Особая благодарность выражается ссылка: Перри Нилу - https://twitter.com/perryneal за его зоркий взгляд, ум и страсть. Ты оказал мне неоценимую помощь. Спасибо.


            Перевод


Данный перевод выполнен с целью популяризации Redis среди русскоговорящих \linebreak разработчиков. Книга является очень удобным и компактным руководством.


            Актуальная версия


Актуальная версия английского варианта книги доступна в ссылка: репозитории Карла - https://github.com/karlseguin/the-little-redis-book.


4

Последнюю версию перевода на русский язык можно найти по ссылка: адресу -https://github.com/kondratovich/the-little-redis-book.

 \clearpage

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

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

Вы можете построить целое приложение, используя только Redis. Однако, я думаю, что большинство людей обнаружит, что Redis дополняет их классическое решение для работы с даными, будь то реляционная СУБД, документо-ориентированная система или что-то еще. Это тот тип систем, которые вы используете для решения специфических задач. В этом смысле Redis близок к индексирующему движку. Вы не будете писать ваше приложение полностью на Lucene, но если вам нужна хорошая система поиска, она подарит вам полезный опыт. Конечно, сходства между Redis и поисковыми движками на этом заканчиваются.

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


            Начало работы


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


            В Windows


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


5

разработки я не сталкивался с какими-либо ограничениями.


Сначала перейдите на ссылка: https://github.com/dmajkic/redis/downloads и скачайте последнюю версию (вверху списка).

Распакуйте архив и, в зависимости от архитектуры вашего компьютера, откройте \linebreak директорию 64bit или 32bit.


            В *nix и MacOSX


Для пользователей *nix и Mac, сборка Redis из исходников является лучшим вариантом. Инструкции, вместе с номером последней версии, доступны по адресу ссылка: http://redis.io/download. На момент написания этих строк последней версией является 2.4.6. Для \linebreak установки выполните:

 wget http://redis.googlecode.com/files/redis-2.4.6.tar.gz
 tar xzf redis-2.4.6.tar.gz
 cd redis-2.4.6 make

(В качестве альтернативы, Redis доступна через различные менеджеры пакетов. \linebreak Например, пользователи MacOSX с установленным Homebrew могут просто выполнить команду brew install redis.) (Установка через менеджер пакетов может оказаться гораздо более \linebreak удачным решением с точки зрения сохранения правильной конфигурации вашей системы - прим. перев.)

Если вы собрали систему из исходных текстов, исполняемые файлы можно найти в \linebreak директории src. Перейдите в эту директорию, введя команду cd src.


            Запуск и Подключение к Redis


Если все прошло успешно, исполняемые файлы Redis должны быть в вашем распоряжении. Redis имеет множество исполняемых файлов. Мы сосредоточимся на сервере и командной оболочке (DOS-подобный клиент). Давайте начнем с сервера. В Windows, двойным кликом запустите redis-server. В *nix/MacOSX выполните команду ./redis-server в \linebreak терминале.

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

Далее, запустите командную оболочку Redis двойным кликом на redis-cli (Windows) или командой ./redis-cli (*nix/MacOSX). Таким образом создастся подключение к локальному серверу на 6379-м TCP-порту по умолчанию.

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


6

должны увидеть множество пар ключ-значение, которые предоставляют большое \linebreak количество информации о состоянии сервера.


Если у вас возникли проблемы с выполнением описанных выше действий, я рекомендую поискать помощь на ссылка: официальных форумах поддержки Redis -https://groups.google.com/forum/#!forum/redis-db.


            Драйверы Redis


Как вы скоро узнаете, API Redis лучше всего описать как набор функций в простом \linebreak процедурном стиле. Это значит, что, используете ли вы командную оболочку или драйвер вашего любимого языка программирования, все работает одинаково. Следовательно, у вас не должно возникнуть проблем, если вы решите работать посредством языка \linebreak программирования. Если хотите, зайдите на ссылка: страницу со списком клиентов - http://redis.io/clients и скачайте необходимый драйвер.

 \clearpage


7

            Основы


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

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

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

Если мы применим эту концепцию к реляционному миру, мы можем сказать, что базы данных предоставляют один тип структур данных - таблицы. Таблицы одновременно сложные и гибкие. Существует очень мало вещей, которые нельзя смоделировать, \linebreak сохранить и которыми нельзя управлять с помощью таблиц. Тем не менее, они не идеальны. А именно, они не на столько простые, или не на столько быстрые, как хотелось бы. Что, если вместо универсальной структуры мы бы использовали специализированные структуры? В этом случае, наверное, найдутся проблемы, которые мы не сможем решить (или, по крайней мере, не сможем решить достаточно хорошо). Однако, в любом случае, мы выиграем на простоте и скорости.

Использование специфичных структур данных для специфичных задач? Разве это не тот подход, который мы постоянно используем при программировании? Вы не используете хеш-таблицы для всех данных программы, то же самое и со скалярными переменными. (Скалярные типы данных: строки, целые числа, дроби, булев тип - прим. перев.) Я считаю, в этом и состоит подход Redis. Если вы работаете со скалярами, списками, или множествами, почему бы не хранить их как скаляры, списки, хеши и множества? Почему проверка на существование должна быть сложнее чем просто вызов exists(key) или медленнее чем O(1) (постоянное время выполнения выражения, которое не зависит от количества записей в хранилище)?


            Составные Кирпичики


Базы Данных


8

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

В Redis база данных идентифицируется просто числом, которое по умолчанию равняется 0. Если вы хотите сменить базу данных, то вы можете сделать это командой select. В командной строке просто введите select 1. Redis должен ответить сообщением OK и в терминале вы должны увидеть что-то типа redis 127.0.0.1:6379[1]>. Если вы хотите переключиться обратно на базу по умолчанию, просто введите в командной строке select 0.

Команды, Ключи и Значения

Несмотря на то, что Redis больше, чем просто хранилище типа ключ-значение, в его основе каждая из пяти используемых структур данных имеет, как минимум, ключ и \linebreak значение. Очень важно разобраться в том, что такое ключи и что такое значения, перед тем как двигаться дальше.

Ключ - это то, чем мы помечаем части информации. Мы будем пользоваться ключами часто, но пока достаточно знать, что ключ может выглядеть вот так: users:leto. Под таким ключом можно ожидать информацию о пользователе под именем leto. Двоеточие не имеет никакого особого значения, но использование подобных разделителей является хорошим тоном.

Значение - это данные, которые ассоциированы с ключом. Это может быть что угодно. Иногда это строки, иногда числа, а иногда там хранятся сериализованные объекты (в виде JSON, XML или любых других форматов). В основном, Redis рассматривает значение как массив байт и не интересуется тем, что они собой представляют. Обратите внимание, что разные драйверы производят сериализацию по-разному. Поэтому, здесь мы будем говорить только о строках (string), целых числах (integer) и JSON.

Давайте попрактикуемся. Выполните следующие команды:

 set users:leto "{name: leto, planet: dune, likes: [spice]}"

Почти все команды Redis выглядят подобным образом. Сначала идет сама команда, в нашем случае set, а потом параметры. Команда set принимает два параметра: ключ, который мы сохраняем, и значение, которое связано с ним. Многие, но не все, команды принимают ключ (это обычно первый параметр). А теперь угадайте, как получить это значение? Надеюсь, что вы догадались (не расстраивайтесь, если это не так):

 get users:leto

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


9

Запросы


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

У многих это может вызвать некоторое беспокойство. Мы живем в мире, где запросы к базам данных стали столь гибкие и мощные, что подход Redis кажется примитивным и неудобным. Не дайте ввести себя в заблуждение. Redis не является универсальным решением на все случаи жизни. Существуют проблемы, которые просто не решаются с помощью Redis (из-за ограничений в запросах). Также стоит принять к сведению, что в некоторых случаях, вы найдете другие способы смоделировать ваши данные.

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

Память и Персистентность

Мы упоминали ранее, что Redis является персистентным хранилищем в оперативной \linebreak памяти. По умолчанию, для поддержания персистентности, Redis сохраняет снимки базы данных на диск в зависимости от того, сколько ключей было изменено. Вы можете \linebreak настроить этот процесс таким образом, что если X - количество изменившихся ключей, то базу данных нужно сохранять каждые Y секунд. По умолчанию, Redis сохраняет базу с интервалами от 60 секунд, если 1000 или более ключей изменились, до 15 минут, если изменились хотя бы 9 ключей.

Кроме того, (или в дополнение к сохранению снимков базы на диске), Redis может быть запущен в режиме дозаписи (append mode). Каждый раз, когда ключ меняется, на диске дописывается запись в файле, открытом в режиме дозаписи (новые записи добавляются в конец файла). Иногда стоит принять риск потери данных последних 60 секунд в случае аппаратной или программной ошибки в обмен на производительность. В других случаях такой риск неприемлем. Redis дает вам выбор. В главе 5 мы рассмотрим третью \linebreak возможность - обеспечение персистентности за счет вспомогательного (slave) хранилища.

Что касается использования памяти, Redis хранит все данные в оперативной памяти. Явным следствием этого является цена использования Redis: оперативная память до сих пор является самой дорогой аппаратной частью серверов.

Я чувствую, что некоторые разработчики забывают о том, как мало места могут занимать данные. Полное собрание сочинений Уильяма Шекспира занимает примерно 5,5 МБ. Что касается масштабирования, другие решения, как правило, ограничены временем ввода/вывода или производительностью процессора. Какое из ограничений (память или ввод/вывод) вынудит вас масштабировать приложение на большем


10

Доступ онлайн
1 000 ₽
В корзину