Redis в PHP

7 хв. читання

Що таке Redis?

Redis - розподілене сховище пар ключ-значення, які зберігаються в оперативній пам'яті, з можливістю забезпечувати довговічність зберігання за бажанням користувача. Це програмне забезпечення з відкритим сирцевим кодом. Redis може зберігати рядки, хеші, списки, множини, відсортовані набори та багато іншого.

Суть сховища ключ-значення - це можливість зберігання деяких даних (значень) всередині ключа. Ці дані в подальшому можуть бути отримані, якщо ми знаємо точний ключ, який був використаний для їх збереження.

Використання Redis

Сальваторе Санфилиппо (творець Redis) вважає, що Redis може бути використаний для заміни РСУБД. Я впевнений, що це погана ідея, тому що такий тип сховища може бути не найкращим рішенням для таких речей, як повнотекстовий пошук.

Нижче перераховані види використання Redis, хоча це лише частина можливих застосувань:

  • Кешування (таким же чином, як memcached)
  • Лідерборди і пов'язані з ними проблеми
  • Лічильники
  • Аналіз в реальному часі.
  • Видалення і фільтрація

Мета статті

Мета цієї статті не в тому, щоб показати вам синтаксис Redis (ви можете дізнатися про Redis нього тут), в цій статті ми дізнаємося, як використовувати Redis в PHP.

Встановлення Redis

Redis досить легко встановити. Інструкції, включені, як для користувачів Windows, так і Linux.

Встановлення Redis на Linux

Процес інсталювання Redis на Linux доволі простий, але ви повинні встановити TCL:

 $ sudo apt-get install tcl 

Щоб встановити Redis:

$ wget http://download.redis.io/releases/redis-2.8.19.tar.gz
$ tar xzf redis-2.8.19.tar.gz
$ cd redis-2.8.19
$ make

Примітка: версія 2.8.19 повинна бути замінена на останню стабільну версію Redis.

Всі бінарні файли Redis зберігаються в папці SRC. Для запуску сервера виконайте:

$ src/redis-server

Встановлення на Windows

Інсталювання Redis на Windows дуже просте, просто перейдіть за посиланням, завантажте пакети і встановіть.

Встановлення Predis - Redis клієнт для PHP

Він добре написаний і має велику підтримку спільноти. Щоб почати використовувати Predis просто перенесіть репозиторій у ваш робочий каталог:

$ git clone git://github.com/nrk/predis.git

Підключення до Redis

По-перше, нам потрібно включити Redis Autoloader і зареєструвати його. Ми обернемо клієнт в блок try catch. Налаштування підключення до Redis на локальному сервері відрізняється від підключення до віддаленого сервера.

 "tcp",
		    "host" => "153.202.124.2",
		    "port" => 6379
		));
	*/
}
catch (Exception $e) {
	die($e->getMessage());
}

Тепер, коли ми успішно підключилися до Redis, давайте почнемо його використовувати.

Типи даних Redis

Redis підтримує різні типи даних. Можливо, ви задавалися питанням: Що NOSQL ключ-значення сховище має робити з типами даних? Ці типи даних допомагають розробникам зберігати данні в інтуїтивно зрозумілій формі і швидше їх отримувати. Ось деякі з типів даних, підтримуваних Redis:

  • Рядок (String) - подібний до рядків в PHP
  • Список (List) - аналогічний одновимірним масивам в PHP. Ви можете виконувати push, pop, shift, unshift дії для елементів, які розташовані по порядку або згідно FIFO (first in, first out)
  • Хеш (Hash) - карти між полями рядків і строкових значень. Це ідеальний тип даних для представлення об'єктів (наприклад: Користувач з такими полями: ім'я, прізвище і тд.)
  • Набір (Set) - подібний до списків, за винятком того, що в ньому немає порядку і кожен елемент може зустрічатись лише один раз.
  • Сортований набір (Sorted Set) - подібний до наборів з унікальною функцією значень, що зберігаються в наборі. Різниця в тому, що кожен член відсортованого набору пов'язаний з рахунком, який використовується, щоб сортувати набір від найменшого значення рахунку до найбільшого

Також присутні такі типи даних, як бітові карти і hyperloglogs, але вони не будуть обговорюватись у цій статті.

Геттери і Сетери

У Redis, найбільш важливі команди: SET, GET і EXIST. Ці команди використовуються для зберігання, перевірки і вилучення даних з серверу Redis. Як і команди, клас Predis може бути використаний для виконання Redis операцій з допомогою методів (які мають однакові імена з командами). Наприклад:

set(';message';, ';Hello world';);

// отримує значення повідомлення
$value = $redis->get('message');

// Hello world
print($value); 

echo ($redis->exists('message')) ? "Oui" : "будь ласка, заповніть ключ повідомлення";

Інкрементація і декрементація

INCR і DECR - команди, які використовуються для зменшення або збільшення значення.

set("counter", 0);

$redis->incr("counter"); // 1
$redis->incr("counter"); // 2

$redis->decr("counter"); // 1

Ми також можемо збільшити значення ключа-лічильника за допомогою більшого числового значення або зменшити його з командами INCRBY і DECRBY.

set("counter", 0);

$redis->incrby("counter", 15); // 15
$redis->incrby("counter", 5);  // 20

$redis->decrby("counter", 10); // 10

Робота зі списками

Існує кілька основних команд Redis для роботи зі списками:

  • LPUSH - додає елемент на початок списку
  • RPUSH - додати елемент в кінець списку
  • LPOP - видаляє перший елемент зі списку, і повертає його
  • RPOP - видаляє останній елемент зі списку, і повертає його
  • LLEN - повертає довжину списку
  • LRANGE - отримує ряд елементів зі списку
rpush("languages", "french"); // [french]
$redis->rpush("languages", "arabic"); // [french, arabic]

$redis->lpush("languages", "english"); // [english, french, arabic]
$redis->lpush("languages", "swedish"); // [swedish, english, french, arabic]

$redis->lpop("languages"); // [english, french, arabic]
$redis->rpop("languages"); // [english, french]

$redis->llen("languages"); // 2

$redis->lrange("languages", 0, -1); // повертає всі елементи
$redis->lrange("languages", 0, 1); // [english, french]

Робота з Хэшами

Хеш в Redis - це карта між одним полем рядка і рядковим значенням, подібно відносинам "один-до-багатьох". Команди, пов'язані з хешами в Redis:

  • HSET - задає ключ-значення хеш
  • HGET - отримує ключ-значення хеш
  • HGETALL - отримує всі ключі і значення хеш
  • HMSET - масивне призначення кількох ключів і значень хеш
  • HDEL - видаляє ключ з об'єкта
  • HINCRBY - збільшує ключ-значення з хеша на задане значення
hset($key, ';age';, 44);
$redis->hset($key, ';country';, ';finland';);
$redis->hset($key, 'occupation', 'software engineer');
$redis->hset($key, 'reknown', 'linux kernel');
$redis->hset($key, 'to delete', 'i will be deleted');

$redis->get($key, 'age'); // 44
$redis->get($key, 'country')); // Finland

$redis->del($key, 'to delete');

$redis->hincrby($key, 'age', 20); // 64

$redis->hmset($key, [
    'age' => 44,
    'country' => 'finland',
    'occupation' => 'software engineer',
    'reknown' => 'linux kernel',
]);

$data = $redis->hgetall($key);
print_r($data); // повертає всі значення ключа, який належить хешу
/*
    [
        'age' => 44,
        'country' => 'finland',
        'occupation' => 'software engineer',
        'reknown' => 'linux kernel',
    ]
*/

Робота з наборами

Список команд, пов'язаних з наборами включають в себе:

  • SADD - додає N-кількість значень ключа
  • СРЕМ - видаляє N-кількість значень від ключа
  • SISMEMBER - перевірка існування значення
  • SMEMBERS - списки значень в наборі
sadd($key, ';china';);
$redis->sadd($key, ['england', 'france', 'germany']);
$redis->sadd($key, 'china'); // ця запис ігнорується

$redis->srem($key, ['england', 'china']);

$redis->sismember($key, 'england'); // false

$redis->smembers($key); // ['france', 'germany']

Терміни дії та постійність

Ви, ймовірно, не збираєтесь зберігати дані вічно. Саме тому, Redis надає нам наступні команди:

  • EXPIRE - встановлює час закінчення (у секундах) для ключа, після чого він буде вилучений
  • EXPIREAT - встановлює час закінчення терміну дії, використовуючи unix timestamps для ключа, після чого він видаляється
  • TTL - отримує термін дії ключа
  • PERSIST - робить ключ вічним, видаляючи з нього таймер закінчення
$key = "expire in 1 hour";
$redis->expire($key, 3600); // закінчується через 1 годину
$redis->expireat($key, time() + 3600); // закінчується через 1 годину

sleep(600);

$redis->ttl($key); // 3000, отже, закінчується через 50 хвилин

$redis->persist($key); // ніколи не закінчиться

Висновок

Команди, перелічені в цій статті лише деякі з багатьох існуючих Redis команд (див. докладніше команди redis).

Майбутнє Redis

Redis - це краща заміна для memcached, так як він швидший, краще масштабується (підтримує master-slave реплікації), працює з типами даних, через що багато організацій (Facebook, Twitter, Instagram) обрали Redis замість memcached. Це open source проект і багато гарних програмістів з open-source спільноти випускають патчі для цього інструменту.

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 5.8K
Приєднався: 8 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація