redis php что это
Знакомимся с Redis
Узнаём, для чего эта СУБД нужна и как ею пользоваться.
pierre borthiry / unsplash
Redis ( REmote DIctionary Server, «удалённый серверный словарь») — это нереляционная резидентная СУБД, хранящая данные в виде пар «ключ-значение».
От реляционных баз Redis отличается:
Разрабатывает приложения на Java, воспитывает двух котов: Котлин и Монго.
Для чего используют Redis
Redis обычно применяют:
Как начать работать с Redis
Самый лёгкий способ — запустить Redis в docker-контейнере (если не знаете, что это, — добро пожаловать сюда).
Запускаем контейнер командой:
Убедимся, что контейнер запущен:
Затем открываем новую сессию и интерфейс командной строки ( CLI ):
Можно и сразу перейти в консоль Redis:
Вот мы и готовы работать с Redis.
Основные команды
Рассмотрим основные операции на примере хеш-таблиц.
HSET — сохраняет значение по ключу:
В примере выше мы создали объект person1 с двумя полями ( name и age) и соответствующими значениями.
HGET — получение значения по ключу (для определённого поля):
Выше мы получили значение поля name у ключа person1.
HGETALL — получение всех пар «ключ-значение»:
Получили значения всех полей по ключу person1.
HKEYS и HVALS — получение всех ключей и соответствующих им значений:
Как работать с оставшимися структурами данных — смотрите в официальном руководстве.
Транзакции
Важно понимать, что транзакции в Redis не сохраняют целостность данных (сбой одной операции при выполнении блока транзакции не мешает исполнить другие).
После запуска команды multi интерфейс redis-cli ответил на каждую последующую состоянием QUEUED («в очереди»). Когда мы запустили команду exec, то получили выходные данные каждой команды из очереди.
Отменить транзакцию можно командой discard. Она предотвратит запуск всех команд, ранее поставленных в очередь, — и Redis снова будет выполнять команды в обычном режиме. Чтобы сообщить серверу, что вы открываете новую транзакцию, нужно снова запустить multi.
Важно понимать, что когда команда уже встала в очередь (то есть синтаксически верна), то, даже если она и вызовет ошибку при выполнении, остальные команды выполнятся всё равно. А вот если не встала (невалидна, вызвала ошибку при постановке в очередь), то Redis блок транзакции отклонит, даже не дождавшись exec. И если вы попытаетесь после этого выполнить exec, вам скажут, что транзакция была отклонена из-за предыдущих ошибок.
Как Redis обрабатывает ошибки внутри транзакций, читайте тут.
Механизм подписок
Он позволяет одному клиенту создать канал событий и публиковать туда сообщения, а другому — подписываться и читать эти сообщения (так можно создать простой чат).
Механизм подписок не гарантирует, что сообщение будет доставлено. Мы отправляем сообщение в канал, а кто его примет (и примет ли) — обещать не можем, стоит помнить об этом и не использовать подписки там, где важно обратное.
Итак, клиент подписывается на канал командой:
Использование Redis
В этой статье мы расскажем что такое Redis, его преимущества и для каких целей он используется.
Redis (REmote DIctionary Server) — сетевое журналируемое хранилище данных типа «ключ» — «значение» с открытым исходным кодом. По сути Redis представляет собой базу данных (как MySQL), только упрощенную и более быструю за счет отсутствия связи между данными, а также простому механизму работы с данными (подход noSql).
Redis, за счет его высокой скорости работы, удобно использовать для хранения различных счетчиков, например, количества просмотров страниц сайта, или же каких-либо временных данных. Достаточно распространено хранение кеша сайта, хранение PHP-сессий.
Пример хранения PHP-сессии в Redis
В первую очередь нужно включить Redis. Сделать это можно в Панели управления аккаунтом, в разделе Сервисы. По умолчанию сессии хранятся в файлах. Эту информацию можно увидеть в секции session, вызвав PHP-функцию phpinfo.
Первая строка определяет имя обработчика хранения сессий.
Вторая определяет путь для хранения сессий. Redis работает как демон на стандартном порту, поэтому указываем:
Либо включить опцию в разделе «Сайты», вышеописанные опции в таком случае будут применены к сайту автоматически:
Также включить хранение сессий в redis’е можно сразу для всех сайтов:
После включении опции, в phpinfo, можно наблюдать что сессии хранятся в Redis:
Проверим результат с помощью тестового скрипта, который создает сессию:
Делаем запрос к скрипту:
Подключаемся к Redis и проверяем, что сессия сохранилась:
Далее мы рассмотрим подключение Redis с целью кеширования данных в самых распространенных CMS.
Подключение Redis к WordPress
Для подключения Redis к CMS WordPress в первую очередь необходимо зайти в административную часть сайта. В качестве примера рассмотрим домен my-site.com, в этом случае ссылка будет следующая: http://my-site.com/wp-login.php или http://my-site.com/wp-admin.
В административной панели следует выбрать пункт меню Плагины, затем подпункт Добавить новый.
На открывшейся странице ввести в поле поиска плагинов Redis.
Затем нажать «Установить» в окне плагина «Redis Object Cache», после чего появится сообщение о успешной установке плагина:
Затем следует перейти в раздел Плагины, подраздел Установленные, и активировать плагин.
После чего появится сообщение о том, что WordPress подключен к Redis:
Плагин установлен и активирован, осталось добавить нужные директивы в конфигурационный файл wp-config.php.
Сделать это можно через Файловый менеджер.
Открываем директорию сайта и нажимаем Править на нужном файле, в нашем случае это wp-config.php.
В открывшемся окне добавляем в начало файле следующие строки:
Готово, сайт полноценно работает с Redis.
Проверяем, что данные действительно пишутся в Redis:
Сделаем тест производительности с помощью утилиты Siege.
Результаты с отключенным Redis:
Результаты с подключенным Redis:
Видим, что среднее время на ответ сервера уменьшилось, а количество открытых страниц, в свою очередь, наоборот увеличилось.
Подключение Redis к Joomla
Для подключения Redis к CMS Joomla в первую очередь необходимо зайти в административную часть сайта:
http://my-site.com/administrator/.
В 3-ей ветке версии CMS Joomla уже есть возможность подключить хранение кеша в Redis.
Для включения в административной панели следует выбрать пункт меню Система, затем подпункт Общие настройки.
На открывшейся странице выбираем пункт меню Система.
Устанавливаем значение «кеш» в Стандартное кеширование.
Значение «обработчик кеширования» в Redis.
Остальные настройки подходят по умолчанию.
Можно убедится, что данные теперь пишутся в Redis:
С помощью утилиты Siege проверяем, как изменилась скорость работы сайта.
Результаты с отключенным Redis:
Результаты с включенным Redis:
Из всего вышесказанного можно сделать вывод, что Redis является прекрасным инструментом для работы с данными и в умелых руках может существенно улучшить производительность сайта.
Введение в Redis в PHP с использованием Predis
Redis — это сервер структуры данных с открытым исходным кодом с набором данных в памяти, который благодаря встроенным типам данных делает гораздо больше, чем просто хранилище ключей / значений.
Он был запущен в 2009 году Сальваторе Санфилиппо и из-за его популярности быстро рос, будучи выбранными крупными компаниями, такими как VMware (который позже нанял Санфилиппо для работы над проектом на полную ставку), GitHub, Craigslist, Disqus, Digg, Blizzard, Instagram и больше (см. redis.io/topics/whos-using-redis ).
Существует много аргументов в пользу того, что Redis или Memcache лучше, хотя, как показывают тесты, они выполняют почти одинаково для основных операций. Redis имеет больше возможностей, чем Memcache, таких как постоянство в памяти и на диске, атомарные команды и транзакции, и не регистрирует каждое изменение на диске, а вместо этого структуры данных на стороне сервера.
В этой статье мы рассмотрим некоторые из основных, но мощных команд, которые Redis может предложить с помощью библиотеки Predis.
Простая установка
Redis прост в установке, и краткие инструкции по установке опубликованы на странице загрузки продукта. Исходя из моего собственного опыта, если вы работаете в Ubuntu, вы получите ошибку, если у вас не установлен TCL (просто запустите sudo apt-get install tcl). После установки Redis вы можете запустить сервер:
Если у вас на компьютере установлен Git, как и у меня, все, что вам нужно сделать, это клонировать репозиторий Predis. В противном случае вам нужно скачать ZIP-архив и распаковать его.
Чтобы проверить все, создайте файл test.php
Когда вы запустите его, вы должны увидеть сообщение «Успешно подключен к Redis».
Использование Redis
В этом разделе вы получите обзор наиболее часто используемых команд, предлагаемых Redis. У Memcache есть эквивалент для большинства из них, поэтому, если вы знакомы с Memcache, этот список покажется вам знакомым.
SET, GET и EXISTS
Наиболее важными командами, используемыми с Redis, являются SET GET EXISTS Вы можете использовать эти команды для хранения и проверки временной информации, доступ к которой будет осуществляться несколько раз, как правило, способом ключ / значение. Например:
Метод set() get() Метод exists()
Ключ не ограничивается буквенно-цифровыми символами и подчеркиванием. Следующее будет работать так же хорошо:
INCR (INCRBY) и DECR (DECRBY)
Команды INCR DECR INCR и DECR увеличивают / уменьшают свои значения на 1; Вы также можете использовать INCRBY DECRBY Вот пример:
Типы данных Redis
Как я упоминал ранее, Redis имеет встроенные типы данных. Вы можете подумать, что странно иметь типы данных в системе хранения значений ключей NoSQL, таких как Redis, но разработчикам было бы полезно структурировать информацию более осмысленным образом и выполнять конкретные операции, которые обычно намного быстрее, когда данные набраны. Типы данных Redis:
До сих пор я демонстрировал только строки, но есть команды, которые упрощают работу с данными в других типах данных.
HSET, HGET и HGETALL, HINCRBY и HDEL
Эти команды используются для работы с хеш-типом данных Redis:
Вот пример, который демонстрирует их использование:
LPUSH, RPUSH, LPOP, RPOP, LLEN, LRANGE
Это важные команды для работы с типом списка в Redis. Список Redis похож на массив в PHP и предлагает отличную поддержку для реализации очередей, стеков или ограниченного набора определенного количества элементов.
EXPIRE, EXPIREAT, TTL и PERSIST
Скорее всего, когда вы устанавливаете ключ, вы не хотите, чтобы он сохранялся вечно, потому что через определенный промежуток времени он, скорее всего, уже не будет актуален. Вам нужно будет обновить его значение или удалить его, чтобы уменьшить использование памяти для повышения производительности. Redis предлагает четыре команды, которые позволяют легко обрабатывать постоянство данных.
Резюме
В этой статье мы рассмотрели только краткий список команд Redis, но вы можете проверить весь список команд на веб-сайте Redis. Действительно, Redis может предложить гораздо больше, чем просто замена Memcache.
Redis здесь в долгосрочной перспективе; у него растущее сообщество, поддержка всех основных языков, а также надежность и высокая доступность благодаря репликации ведущий-ведомый. Redit — это открытый исходный код, поэтому, если вы гуру C, вы можете раскошелиться на его исходный код из GitHub и стать участником.
Redis — высокопроизводительное хранилище данных
Бодрый день, хаброчеловеки!
Что такое Redis?
Redis — это высокопроизводительное нереляционное распределённое хранилище данных. В отличие от Memcached, который может в любой момент удалить ваши данные, вытесняя старые записи новыми, Redis хранит информацию постоянно, таким образом он похож на MemcacheDB.
Чем Redis отличается от существующих решений?
API для работы с Memcached (MemcacheDB) позволяет хранить массивы, но эти массивы будут сериализованы и сохранены как строки, таким образом атомарные операции над такими массивами не возможны.
Redis позволяет хранить как строки, так и массивы, к которым можно применять атомарные операции pop / push, делать выборки из таких массивов, выполнять сортировку элементов, получать объединения и пересечения массивов.
Производительность
110000 запросов SET в секунду, 81000 запросов GET в секунду на Linux-сервере начального уровня (тесты).
Высокая скорость работы Redis обеспечивается тем, что данные хранятся в оперативной памяти и сохраняются на диск либо через равные промежутки времени, либо при превышении определённого количества не сохранённых запросов. Из этого вытекает, что используя Redis, вы можете потерять результаты нескольких последних запросов, что вполне приемлимо для большинства веб-приложений, учитывая, что обращение к Redis по скорости сравнимо с обращением к оперативной памяти. Тем не менее, потерь можно избежать через избыточность — Redis поддерживает неблокирующую master-slave репликацию.
Sharding
Redis, как и Memcached, может работать как распределённое хранилище на многих физических серверах. Такой функционал реализуется в клиентских библиотеках, и к сожалению, «из коробки» этот функционал реализован пока только в Ruby API, однако это не мешает вам хешировать ключ самостоятельно и получать ID сервера, к которому с этим ключом обращаться.
API для PHP доступно как в виде модуля, написанного на C, так и в виде PHP5 класса, который общается с Redis-сервером через сокеты, таким образом не требуется устанавливать модуль.
Кроме того существует PHP5 класс от отечественного разрабочика (с именем, заслуживающим доверия. Я серьёзно.) — IMemcacheClient. (Спасибо DYPA за на водку)
Перспективы развития
Разработка ведётся очень активно, комиты происходят почти каждый день, сейчас доступна версия Redis 0.900 (1.0 release candidate 1), которая очень скоро станет версией 1.0
В ближайшем будущем авторы обещают внедрить разные интересные фичи, в том числе и сжатие данных.
Лицензия и поддерживаемые платформы
Redis — написан на ANSI C и работает на большинстве POSIX-систем (Linux, MacOS X). Это бесплатное открытое ПО под BSD лицензией =)
Redis
Быстрое хранилище данных в памяти с открытым исходным кодом для использования в качестве базы данных, кэша, брокера сообщений или очереди.
Что такое Redis?
Redis (расшифровывается как Remote Dictionary Server) – это быстрое хранилище данных типа «ключ‑значение» в памяти с открытым исходным кодом. Проект возник, когда Сальваторе Санфилиппо, первоначальный разработчик Redis, захотел улучшить масштабируемость стартапа в Италии. Он создал хранилище Redis, которое теперь используется в качестве базы данных, кэша, брокера сообщений и очереди.
Redis обеспечивает время отклика на уровне долей миллисекунды и позволяет приложениям, работающим в режиме реального времени, выполнять миллионы запросов в секунду. Такие приложения востребованы в сферах игр, рекламных технологий, финансовых сервисов, здравоохранения и IoT. Сегодня Redis – одно из наиболее популярных ядер с открытым исходным кодом, в течение пяти лет подряд называемое «самой любимой» базой данных от Stack Overflow. Благодаря быстрой производительности Redis широко применяется для кэширования, управления сеансами, разработки игр, создания таблиц лидеров, аналитики в режиме реального времени, работы с геопространственными данными, поддержки служб такси, чатов и сервисов обмена сообщениями, потоковой передачи мультимедиа и приложений с отправкой сообщений по модели «издатель – подписчик» (Pub/Sub).
AWS предлагает два полностью управляемых сервиса для запуска Redis. Amazon MemoryDB for Redis – совместимый с Redis надежный сервис базы данных в памяти, который обеспечивает сверхбыструю производительность. Amazon ElastiCache for Redis – полностью управляемый сервис кэширования, который ускоряет доступ к данным из первичных баз данных и хранилищ с микросекундной задержкой. Более того, ElastiCache также предлагает поддержку Memcached, другой популярной системы кэширования с открытым исходным кодом.
Подробную информацию об ускорении приложений с Amazon ElastiCache for Redis см. в онлайн-вебинаре Tech Talk.
Преимущества Redis
Производительность
Все данные Redis хранятся в памяти, что обеспечивает низкую задержку и высокую пропускную способность доступа к данным. В отличие от традиционных баз данных, хранилища данных в памяти не требуют перемещения на диск, что сокращает задержку ядра до микросекунд. Благодаря этому хранилища данных в памяти могут многократно увеличивать количество выполняемых операций и сокращать время отклика. В результате обеспечивается чрезвычайно высокая производительность. Операции чтения и записи в среднем занимают менее миллисекунды, скорость работы достигает миллионов операций в секунду.
Гибкие структуры данных
В отличие от других хранилищ на основе пар «ключ – значение», которые поддерживают ограниченный набор структур данных, Redis поддерживает огромное разнообразие структур данных, позволяющее удовлетворить потребности разнообразных приложений. Типы данных Redis включают:
Простота и удобство
Redis позволяет писать такой же сложный код с меньшим количеством простых строк. Redis позволяет писать меньше строк для хранения, использования данных и организации доступа к данным в приложениях. Разница в том, что, в отличие от языков запросов традиционных баз данных, с Redis разработчики могут использовать простую структуру команд. Например, вы можете задействовать структуру хэш-данных Redis, чтобы перемещать данные в хранилище только одной строкой кода. Решение подобной задачи с использованием хранилища данных, не поддерживающего структуры хэш‑таблиц, потребует написания серьезного объема кода для преобразования данных из одного формата в другой. Redis уже оснащен встроенными структурами данных и предоставляет множество возможностей их комбинирования и взаимодействия с данными клиента. Разработчикам под Redis доступны более ста клиентов с открытым исходным кодом. Поддерживаемые языки программирования включают Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go и многие другие.
Репликация и постоянное хранение
В Redis применяется архитектура узлов «ведущий‑подчиненный» и поддерживается асинхронная репликация, при которой данные могут копироваться на несколько подчиненных серверов. Это обеспечивает как улучшенные характеристики чтения (так как запросы могут быть распределены между серверами), так и ускоренное восстановление в случае сбоя основного сервера. Для обеспечения постоянного хранения Redis поддерживает снимки состояния на момент времени (копирование наборов данных Redis на диск).
Высокая доступность и масштабируемость
Redis предлагает архитектуру «ведущий‑подчиненный» с одним ведущим узлом или с кластерной топологией. Это позволяет создавать высокодоступные решения, обеспечивающие стабильную производительность и надежность. Если требуется настроить размер кластера, доступны различные варианты вертикального и горизонтального масштабирования. В результате можно наращивать кластер в соответствии с потребностями.
Инструменты с открытым исходным кодом
Redis – проект с открытым исходным кодом, поддерживаемый активным сообществом, включая AWS. Поскольку Redis базируется на открытых стандартах, поддерживает открытые форматы данных и имеет множество клиентов, отсутствует вероятность блокировки поставщиком или технологического тупика.