Статьи

Введение в Redis – в ключе памяти Значение хранилища данных

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

Redis — это хранилище значений ключей в памяти, написанное на языке программирования ANSI C Сальваторе Санфилиппо . Redis не только поддерживает строковый тип данных, но также поддерживает списки, наборы, отсортированные наборы, хэширует типы данных и предоставляет широкий набор операций для работы с этими типами. Если вы работали с Memcached (системой кэширования объектов в памяти), вы обнаружите, что она очень похожа, но Redis — это Memcached ++. Redis не только поддерживает расширенные типы данных, он также поддерживает репликацию данных и может сохранять данные на диске. Ключевые преимущества Redis:

  1. Исключительно быстрая : Redis очень быстр и может выполнять около 110000 SET в секунду, около 81000 GET в секунду . Вы можете использовать утилиту redis-benchmark, чтобы сделать то же самое на своей машине.
  2. Поддерживает богатые типы данных : Redis изначально поддерживает большинство типов данных, которые большинство разработчиков уже знают, как список, набор, отсортированный набор, хэши. Это позволяет очень легко решить множество проблем, потому что мы знаем, какую проблему лучше решить, каким типом данных.
  3. Операции являются атомарными : все операции Redis являются атомарными, что гарантирует, что если два клиента одновременно получат доступ к серверу Redis, получит обновленное значение.
  4. Многофункциональный инструмент : Redis — это многофункциональный инструмент, который можно использовать в различных случаях, таких как кэширование, очереди сообщений (Redis изначально поддерживает публикацию / подписку ), любые недолговечные данные в вашем приложении, такие как сеансы веб-приложений, число посещений веб-страниц, и т.д. Существует много людей, использующих Redis, и их можно найти по адресу http://redis.io/topics/whos-using-redis.

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

Начать работу с Redis очень легко. На коробках Unix:

  • Вы можете либо клонировать git-репозиторий, либо скачать и распаковать tar .
  • Откройте новый терминал и перейдите в каталог, в котором вы клонировали или распаковали Redis и запустите команду make.
  • Запустите ./src/redis-server, чтобы запустить сервер Redis с конфигурацией по умолчанию.
  • Откройте новый терминал и введите ./src/redis-cli, чтобы запустить клиент Redis, который вы будете использовать для работы с сервером Redis.

Для пользователей Windows

  • Загрузите Redis из репозитория dmajkic git .
  • Извлеките zip и добавьте <path to redis> \ redis-2.1.8 \ 64bit к вашему пути.
  • Откройте новую командную оболочку и введите redis-server
  • Откройте новую командную оболочку и введите redis-cli

Я пользователь Windows, поэтому пишу эту статью на основе последнего дистрибутива redis из репозитория dmajkic git . После того, как вы запустите сервер и клиент, вы можете выполнить несколько команд, как показано на рисунке ниже.

redis&gt; pingPONGredis&gt; inforedis_version:2.1.8redis_git_sha1:00000000redis_git_dirty:0arch_bits:64....

Если вы можете успешно выполнить всю команду, значит, установка Redis завершена. Если вы не хотите загружать и устанавливать Redis на своем компьютере, вы можете попробовать Redis из браузера http://try.redis-db.com/

Давайте посмотрим на его типы данных

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

Струны

String — это базовый тип данных, поддерживаемый Redis. Вы можете установить строковое значение ключа, и вы можете получить строковое значение ключа, используя команды SET и GET.

redis> set firstname shekharOKredis> set lastname gulatiOKredis> get firstname"shekhar"redis> get lastname"gulati"

Для строк доступно множество других операций, таких как APPEND, GETRANGE, MSET, STRLENGTH и т. Д. Вы можете найти весь список здесь . Если значения ваших ключей являются целыми числами, вы можете использовать DECR, DECRBY, INCRBY или INCR, которые позволяют увеличивать и уменьшать значения. Они могут быть очень полезны в сценариях, где вы хотите поддерживать количество, например, количество посещений веб-страницы.

redis> incr hitcounter(integer) 1redis> incr hitcounter(integer) 2redis> incr hitcounter(integer) 3redis> decr hitcounter(integer) 2

Списки

Список — это упорядоченная коллекция, в которую можно добавлять любое количество элементов. Элемент может быть уникальным или неуникальным. Помимо добавления и получения элементов из списка, Redis поддерживает множество операций для таких списков, как pop, push, range и т. Д. Полный список команд можно найти здесь . Давайте возьмем пример, что мы хотим поддерживать список слов (уникальность не имеет значения), и мы хотим получить последние 3 слова, которые мы добавили в нашу систему.

redis> LPUSH words austerity(integer) 1redis> LPUSH words socialism(integer) 2redis> LPUSH words moritorium(integer) 3redis> LPUSH words socialism(integer) 4redis> LPUSH words socialism(integer) 5redis> LRANGE words 0 21) "socialism"2) "socialism"3) "moritorium"

 Стоит отметить, что списки Redis основаны на нуле.

наборы

Наборы являются неупорядоченными коллекциями двоичных строк. Чтобы добавить элемент в набор, вы используете команду SADD, а для получения всех членов набора вы используете команду SMEMBERS. Вы можете найти полный список команд SET здесь . Давайте возьмем пример, что мы хотим сохранить коллекцию всех уникальных слов, добавленных в нашу систему.

redis> SADD uniquewords austerity(integer) 1redis> SADD uniquewords pragmatic(integer) 1redis> SADD uniquewords moritorium(integer) 1redis> SADD uniquewords socialism(integer) 1redis> SADD uniquewords socialism(integer) 0

Как видите, поскольку мы использовали SET, мы не можем добавить одно и то же слово (социализм) дважды.

Сортированные Наборы

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

redis> ZADD wordswithlength 9 austerity(integer) 1redis> ZADD wordswithlength 7 furtive(integer) 1redis> ZADD wordswithlength 5 bigot(integer) 1redis> ZRANGE wordswithlength 0 -11) "bigot"2) "furtive"3) "austerity"

 

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

Хэш

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

redis> HSET user:1 name shekhar(integer) 1redis> HSET user:1 lastname gulati(integer) 1redis> HGET user:1redis> HGET user:1 name"shekhar"redis> HGETALL user:11) "name"2) "shekhar"3) "lastname"4) "gulati"

 Свободные концы — то, что не было покрыто

Помимо предоставления всех этих типов данных, Redis также поддерживает транзакции и публикацию / подписку. Я расскажу об этих функциях в следующем посте.

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