Всем привет. В прошлых видео мы довольно детально рассмотрели возможности SQL баз данных и было бы неправильно не рассмотреть хотя бы бегло возможности NOSQl, чтоб вы сами могли сравнить с тем, что я вам раньше рассказал, что SQL достаточно сложен, достаточно мощен, а NOSQL, как правило, проще, меньше возможностей, зато он быстрее и масштабируемее. Давайте рассмотрим возможности NOSQL баз данных на примере Redis, поскольку это одна из самых популярных баз данных NOSQL. И я думаю, что у нас займет это гораздо меньше времени, чем обзор SQL просто за счет того, что функционально NOSQL более ограничен. Итак, что такое Redis? Redis это NOSQL in memory база данных вида ключ- значение, расширенной поддержкой структурированных форматов данных, таких, как списки, хэши, множества и т.д., а также возможность выполнения на стороне севера скриптов обработчиков на языке луа. По моему звучит довольно таки круто. Несмотря на то, что Redis держит данные в памяти, он обеспечивает постоянное сохранение этих данных на диск и гарантирует сохранность базы данных даже в случае аварийного завершения работы. Redis также поддерживат транзакции, позволяющие выполнить за один шаг группу команд, и команда других запросов не смогут в нее вклиниться, при этом он гарантирует не противоречивость и последовательность выполнения набор команд, а в случае каких-то проблем позволяет и откатить эти изменения, в общем то так же, как у MySQL. Для управления данными в Redis есть команды, например, инкримент, дикримент, которые позволяют увеличить, уменьшать значение как какого-то счетчика, операции над списками и множествами, например, можно сделать объединение и пересечение множеств, а также множественные выборки и функций сортировки, в общем-то тоже достаточно большой набор команд. Для сохранения данных на диск есть два режима сохранения: периодическая синхронизация всех данных, которые находятся в памяти, т.е. целиком памяти на диск или ведения на диске лога изменений, причем во втором случае гарантируется полная сохранность всех изменений в любой момент. Возможна также организация кластера с мастер слейф репликации данных на несколько серверов, т.е. у вас есть есть один главный мастер сервер и есть несколько серверов принимающих данные слоевов. Также есть режим обмена сообщениями, типа публикация и подписка, это удобно для организации всяких очередей, что тоже довольно таки круто. Что входит в состав Redis? Во-первых сам Redis сервер, это и есть сам Redis, так же это система мониторинга и обеспечения отказа устойчивости для кластера. Есть Redis кли - консольный клиент Redisа, где можно прописать какие команды, тестировать её, ну или для администрирования использовать. Есть Redis бинчмарк, инструмент, который позволяет тестировать производительность и ещё целый ряд утилит на самом деле входят в состав Redisа. Redis официально не поддерживают Windows, тем не менее есть официальные порты, а вот Linux, Mac OC, с этим проблем никаких. Также, что самое интересное, есть онлайн песочница - трай Redis ио, где можно поиграть с командами Redis. Давайте я вам покажу, вот этот сайт, здесь есть консоль и можно попробовать например, установить какой-то ключ и получить его. Так что если вы захотите поиграть с Redis, вам его даже необязательно устанавливать, вы можете просто в онлайне попробовать команда Redisа. Но я сейчас продемонстрирую вам работу с Redis в консольном клиенте Redis кли. Итак, давайте начнём разбираться Redis. Что такое ключ? Ведь Redis, это хранилище, ключ, значение, так что может быть ключом? Ключом может быть любая последовательность байт. Это может быть и текстовая строка, а может быть и содержимое jpg файла, причём максимальный размер ключа составляет 512 мегабайт. Использовать 512 мегабайтный jpg файлы в качестве ключей всё таки не очень хорошая идея, а вот использовать строку вида user:124 для сохранения данных пользователя с id 124 довольно таки хорошая идея. А что такое тогда значение? Значение в Redis бывает разных типов. Самый простой и очевидный, это строка. Например, если мы захотим кэшировать HTML код страницы, мы можем сохранить это каким-то ключом, вот это будет строка. Строка, так же как и ключ в Redis от двоичной безопасности. То есть это могут быть и действительно строка, а так и тот же самый джпег файл и размер ее также до 512 мегабайт. Давайте посмотрим на примерах. Вот я запускаю Redis кли и соединяюсь с Redis. Давайте установим какой нибудь ключ. Допустим мы как будто бы кэшируем главную страницу, позовем ключ Redis main и запишем в него какой-то текст. И давайте теперь его получим обратно, ну очевидно, ключ может быть абсолютно любой. Команды get и set соответственно позволяют сохранить и получить строковые значения. Причем, если мы сохраним поверх уже существующего, оно будет просто переписан. То есть я могу сохранить сюда вот так и соответственно вернется новое значение, причем даже если под этим ключом будет храниться не строковое значение, поскольку у Redis есть разные типы данных, то если мы используем команду set, мы просто перепишем и будь сохранится строковое, т.е. никаких проблем не возникнет, ключ просто перетрётся. А еще у set могут быть разные опции, например, если мы хотим установить ключ только если его еще не существовало, т.е. Не переписывать как раз ключ, то есть опция NX. Давайте попробуем, вот мы напишем set, например, ключ а, значения один, два, три, четыре и опция NX. Смотрите, у нас ок ключ [inaudible] установился , a если ми попробуем повторить эту команду, ключ у нас уже создан, она вернёт ошибку. Таким образом довольно удобно, Если надо установить ключ только если его нет, а если есть, не перетирать. А если мы сохраним в каком-то ключе целое число, для работы с ними специальная команда, которая позволяет его менять. Давайте сделаем set counter, например, 100 и давайте его увеличим с помощью команды incr сто один, два и так далее. Также мы можем и увеличить не на единицу а на произвольное значение, для этого есть команда incr by, и например, давайте увеличим на десять. 112 стало. Также есть команды декр, декр бай, которая, соответственно, уменьшает счетчик, причем внутри, для Redis, на самом деле одна и та же команда, все эти команды по сути Redis умеет измерять счетчик на какое-то значение, например, положительным или отрицательным. Это просто для удобства разные варианты, но внутри это одинаково. Важно, что все эти операции атамарны, то есть если два клиента одновременно начнут изменять какой-то один и тот же счетчик, не возникнет состояние гонки и значение всегда будет корректно изменено по сумме всех взаимодействий, скажем так. Также, например, есть команда get set, которая позволяет одновременно установить новое значение и вернуть старое, и она тоже атамарна, что тоже очень удобно. get set counter, давайте вернем значение 10. Теперь в каунтере 10, а мы получили 112 предыдущее значение. Также может быть удобно записать и прочитать сразу несколько значений. Для этого есть команды m set и m get, М, это собственно multiple, по сути достаточно понятное название mset, можем а один, б два, ц три. Вот установим сразу три значения и можем получить соответственно mget. Давайте а и ц, 1 и 3, все достаточно просто. Также есть команда exsist, котоое позволяет проверить существование какого-то ключа. Например, если мы напишем exsist c, то получим что он есть, а если мы напишем какой-то явно не существующий, получим что его нет. И так же есть команда дел, которая позволяет удалить какой-то ключ. Как видите если ключ есть, она удаляет и возвращает что успешно, а если нет, то просто возвращает, что не удалился. Также есть команда кейс, которая позволяет искать какие ключи у нас есть. У вас есть ключи а, б, акаунтер и так далее. Есть интересная команда expire, все ключи, которые мы создавали сейчас, они были как бы вечные, то есть эти данные никуда не денутся, а вот если мы хотим, чтобы был доступен только какое-то время, потом он автоматически удалялся, для этого можно использовать команду expire. Это бывает удобно в кэшировании. Давайте попробуем, вот мы создадим обычный ключ, запишем туда какое-то значение, получим его, все у нас работает. А теперь мы напишем expire Ц, наш ключ, и допустим в течении скольких секунд он исчезнет. Смотрите, мы сейчас его получаем, получаем, получаем, получаем, оп, перестал получать. Прошло пять секунд и ключ автоматически удалился. Также мы с помощью ttl команды можем узнать сколько осталось жить ключу. Давайте вернем этот ключ, expire, быстренько напишем ttl ц, 3 секунды, ttl ц, 2, ttl c, 1, ну и все, ключ удалился. Вот это какие-то основные команды для работы, некоторые для работ с ключами вообще с любыми, а некоторые для работы со строковыми ключами. Таким образом мы узнали основные возможности Redis, рассмотрели самый простой тип данных - строки, а в следующем видео мы рассмотрим более сложные типы - список, словарь, множество и упорядочное множество.