Redis представляет собой высокопроизводительное нереляционное распределённое хранилище данных в памяти, которое может быть использовано в качестве базы данных, кэша, брокера сообщений или всего сразу вместе. Он поддерживает множество структур данных: строки (strings), хэш-таблицы (hashes), списки (lists), наборы (sets), отсортированные наборы (sorted sets) с запросами диапазона, карты битов (bitmaps), hyperloglogs и геопространственные индексы (geospatial indexes) с радиус-запросами. Ключи с ограниченным временем жизни идеально подойдут для организации кэш-хранилища. Redis имеет встроенную репликацию, возможность написания скриптов на языке Lua, LRU cache, транзакции и различные уровни хранения данных на диске, а также обеспечивает высокую доступность через Redis Sentinel и автоматическое партиционирование с помощью Redis Cluster. И всё это с открытым исходным кодом под лицензией BSD.
С помощью Redis можно выполнять атомарные операции: добавление к строке; инкремент значения в хэш-таблице; добавление элемента в список; вычисление пересечения списков, а также их объединение и разность; получение значения с наивысшим значением в отсортированном наборе.
Для достижения высокой производительности Redis работает с данными в памяти. В зависимости от варианта использования можно сохранять данные путём сохранения дампа на диск, либо путем записи каждой команды в журнал. Сохранение данных может быть вообще отключено, если Redis используется только как полноценный кэш доступный по сети.
Redis также поддерживает асинхронную репликацию master-slave с достаточно простой настройкой, с очень быстрой неблокирующей первой синхронизацией, автоматическое повторное соединение с частичной ресинхронизацией после сбоев сети. Вы можете использовать Redis практически с любым языком программирования: Ruby, Python, PHP, Erlang, Tcl, Perl, Lua, Java.
Redis написан на ANSI C и работает в большинстве систем POSIX, таких как Linux, *BSD, OS X без внешних зависимостей. Linux и OS X — это две операционные системы, в которых Redis разрабатывается и тестируется. Redis может работать в системах Solaris, таких как SmartOS. Официальной поддержки для Windows не существует, но Microsoft разрабатывает и поддерживает свою версию Redis для архитектуры Win-64.
Действительно ли Redis очень быстрый?
Даже на простых компьютерах Redis способен выдавать 110 000 записей в секунду или 81 000 чтений в секунду. На мощных серверах эти значения могут быть до 10 раз выше.
Высокая скорость работы Redis обеспечивается за счёт работы с данными в оперативной памяти, а сохранение на диск происходит через определённый интервал времени, либо при превышении установленного количества не сохранённых запросов.
В худшем случае во время сбоя вы можете потерять результаты за последние несколько секунд работы, что вполне приемлемо для большинства приложений, учитывая, что обращение к Redis по скорости сравнимо с обращением к оперативной памяти. Тем не менее, потерь можно избежать через избыточность — Redis поддерживает неблокирующую master-slave репликацию.
Отличия Redis от Memcache и других key-value систем
В отличие от Memcache, который может в любой момент удалить ваши данные, вытесняя старые записи новыми, Redis хранит информацию постоянно, таким образом он похож на MemcacheDB.
API для работы с Memcached позволяет хранить массивы, но эти массивы будут сериализованы и сохранены как строки, таким образом атомарные операции над такими массивами не возможны. Redis позволяет хранить как строки, так и массивы, к которым можно применять атомарные операции pop/push, делать выборки, выполнять сортировку элементов, получать объединения и пересечения массивов.