Redis

WebSite / GitHub

Redis (remote dictionary server) - сетевое журналируемое хранилище данных типа «ключ — значение» с открытым исходным кодом (NoSQL-СУБД). Нереляционная высокопроизводительная СУБД.

Хранит базу данных в оперативной памяти, снабжена механизмами снимков и журналирования для обеспечения постоянного хранения (на диске). Также предоставляет операции для реализации механизма обмена сообщениями в паттерне издатель-подписчик. С его помощью приложения могут создавать каналы, подписываться на них и помещать в каналы сообщения, которые будут получены всеми подписчиками (как IRC-чат).

Поддерживает репликацию данных с основных узлов на несколько подчинённых (master - slave replication). Также Redis поддерживает транзакции и пакетную обработку команд (выполнение пакета команд, получение пакета результатов). Redis работает на большинстве POSIX-систем, таких как Linux, *BSD, Mac OS X без каких-либо дополнений.

Множество языков программирования имеют библиотеки для работы с Redis: C, C++, C#, Java, JavaScript, PHP, Python и др.

Все данные Redis хранит в виде словаря, в котором ключи связаны со своими значениями. Одно из ключевых отличий Redis от других хранилищ данных заключается в том, что значения этих ключей не ограничиваются строками. Поддерживаются следующие абстрактные типы данных:

  • Строки
  • Списки
  • Множества
  • Хеш-таблицы
  • Упорядоченные множества

Тип данных значения определяет, какие операции (команды) доступны для него. Redis поддерживает такие высокоуровневые операции, как объединение и разность наборов, а также их сортировку.

Восстановление данных проводится двумя разными способами. Первый — это механизм снимков, в котором данные асинхронно переносятся из оперативной памяти в файл формата *RDB (расширение дампов Redis). Второй способ (с версии 1.1) — файл, доступный только для дозаписи, в котором хранится лог всех операций, изменявших данные в памяти.

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


Redis and FreeBSD

Install Redis:

cd /usr/ports/databases/redis/ && make install clean

These following programs will be installed with Redis:

  • '/usr/local/bin/redis-sentinel' - the Redis Sentinel executable (monitoring and failover)
  • '/usr/local/bin/redis-cli' - the command line interface utility to talk with Redis
  • '/usr/local/bin/redis-server' - the Redis Server itself
  • '/usr/local/bin/redis-benchmark' - used to check Redis performances

Redis configuration file: /usr/local/etc/redis.conf

To run Redis from startup, add 'redis_enable="YES"' in your '/etc/rc.conf'.

To bind Redis to a single interface, add the following line to '/usr/local/etc/redis.conf':

bind 127.0.0.1

Commands:

  • service redis stop - Stop Redis
  • service redis start - Start Redis
  • service redis restart - Restart Redis
  • service redis status - Status Redis
  • redis-cli - Redis CLI client
  • monitor - Monitor Redis Transactions
  • INFO - Server Statistics
  • CONFIG GET * - List of all active configuration variables

Redis has a concept of separated namespaces called 'databases'. You can select the database number you want to use with 'SELECT'. By default the database with index 0 is used.

To find out how many databases there are you might want to run 'redis-cli' from the shell:

  • redis-cli INFO | grep ^db
  • FLUSHDB - Drop the currently selected database
  • FLUSHALL - Drop all databases
  • CLIENT LIST - Connections list
  • CLIENT KILL <IP>:<port> - Terminate connection
  • ping - Check Redis with ping command. Redis will response with "PONG"
  • exit - exit from redis-cli

PHP5-Extension for Redis:

cd /usr/ports/databases/php5-redis/ && make install clean

Redis check script (PHP):

$redis = new Redis();
$redis->connect('/tmp/redis.sock', 0);
// $redis->connect('127.0.0.1', 6380);
			
$time_start = microtime(true);
			
for($i=0; $i<5; $i++) {
	$redis->set('key_test_'.$i, 'RedisTest');
}
			
echo "Write: ".( microtime(true) - $time_start )." seconds.";
			
$time_start = microtime(true);
			
for($i=0; $i<5; $i++) {
	$redis->get('key_test_'.$i);
}
			
echo "Read: ".( microtime(true) - $time_start )." seconds.";

Karl Seguin - The Little Redis Book