Какво става лесно
с Redis?
Свилен Иванов
VarnaConf
20 юли 2013
За мен
2 / 178
● Обича да програмира
● Знае Уорд, Ексел,
Интернет...
● ... но предпочита Java,
Perl, JavaScript, Ruby...
● Знае разликата между
Java и JavaScript
svilen.ivanov@gmail.com
@buhtum
Какво е Redis?
● Сървър за съхранение на key/value данни
● В оперативната памет
– с възможност за периодично синхронизиране с
диска*
● Стойностите, освен string, могат да бъдат:
– List (списък)
– Hash (хеш таблица)
– Set (множество без повторениe)
– Sorted Set (подредено множество без повторение)
● Изпълнение на команди в транзакция
3 / 178
Видове стойности
4 / 178
Основни команди (1)
● SET/GET или MSET/MGET
● INCR/INCRBY, DECR/DECRBY
– Приложение: броячи
● GETSET – записва нова стойност, връща
старата
– Приложение: нулиране на брояч
● SETNX – записва стойност, ако няма такъв ключ
– Приложение: заключване
● SETBIT, BITCOUNT
– Приложение: статистики в реално време
Приложениe: заключване
● Снихронизация между разпределени процеси
● Получаване:
– SETNX lock.foo
<current Unix time + lock timeout + 1>
● Проверка:
– GET lock.foo
+ проверка дали не е изтекла
● Освобождаване
– GETSET lock.foo
<current Unix timestamp + lock timeout + 1>
+ проверка дали не е изтекла
– DEL
Ключове и стойности
● Ключове
– няма конкретни изисквания
– пример: типът на обекта, идентификатор и/или друга
информация, по която се налага да се търси
– user:123, logins:2013-03-31,
user:123:followers, etc.
● Стойности
– обикновени низове (конвертирани до байтове)
– сериализиран обект: JSON, Protocol Buffers...
Тип: list (списък)
Тип: list (списък)
Приложение на списъците
● Опашка за асинхронно изпълнение на
задачи (job queue)
– RPUSH, LPOP
– BRPUSH, BLPOP: блокиращи аналози
● Реализация на timeline
– LPUSH за добавяне
– LRANGE за извличане на последните N поста
● „Recently viewed“
– LPUSH
– LTRIM n – за премахване на излишните дни
Тип: set (множество)
Тип: set (множество)
● Операции върху множествата
– SINTER – сечение
● SINTERSTORE
– SUNION – обединение
● SUNIONSTORE
– SDIFF – разлика
● SDIFFSTORE
Приложение на множествата
● Създаване на връзки между обекти
(примерно followers, followees)
– SADD, SREM с ID на потребителя
● Tagging
– По едно множество за всеки tag: „tag:linux“,
„tag:programming“, „tag:ruby“
– Всяко множество съхранява ID на статия
– SINTER „tag:linux“, „tag:programming“
Тип: подредени множества
(sorted sets)
● Също като Set, но към всеки елемент се
присвоява „тегло“, по което се сортира
● Приложение: класации
Stefan1
Peter3
Svilen4
ZADD leaderboard 2 Ivan
ZRANGE leaderboard 0 -1
1) "Stefan"
2) "Ivan"
3) "Peter"
4) "Svilen"
Ivan2
Stefan1
Peter3
Svilen4
Тип: подредени множества
(sorted sets)
● ZRANK, ZREVRANK – на кое място се
намира в класацията
● ZREMRANGEBY* - премахва елемент от
класацията
– RANK
– SCORE
● ZINCRBY – увеличава теглото на даден
елемент
Тип: хеш таблица (hash)
Администриране
Администриране (1)
● Надеждно съхранение на данните
– пълно изображение на паметта (snapshoting)
– всяка промяна, в append-only файл
– комбинирано
● Репликация от тип „master-slave“
– Използва се за мащабируемост (scalability)
– Освобождаване на „master“ сървъра от
записване на информацията на диска
Администриране (2)
● Ако оперативната памет свърши?
– добавяне на още памет
– sharding
● Автоматичен failover
– инструмент: sentinel
● Позволява upgrade без downtime
– чрез репликация
● Конфигуриране без рестартиране
Демонстрация
Въпроси?

Redis by Svilen Ivanov

  • 2.
    Какво става лесно сRedis? Свилен Иванов VarnaConf 20 юли 2013
  • 3.
    За мен 2 /178 ● Обича да програмира ● Знае Уорд, Ексел, Интернет... ● ... но предпочита Java, Perl, JavaScript, Ruby... ● Знае разликата между Java и JavaScript svilen.ivanov@gmail.com @buhtum
  • 4.
    Какво е Redis? ●Сървър за съхранение на key/value данни ● В оперативната памет – с възможност за периодично синхронизиране с диска* ● Стойностите, освен string, могат да бъдат: – List (списък) – Hash (хеш таблица) – Set (множество без повторениe) – Sorted Set (подредено множество без повторение) ● Изпълнение на команди в транзакция 3 / 178
  • 5.
  • 6.
    Основни команди (1) ●SET/GET или MSET/MGET ● INCR/INCRBY, DECR/DECRBY – Приложение: броячи ● GETSET – записва нова стойност, връща старата – Приложение: нулиране на брояч ● SETNX – записва стойност, ако няма такъв ключ – Приложение: заключване ● SETBIT, BITCOUNT – Приложение: статистики в реално време
  • 7.
    Приложениe: заключване ● Снихронизациямежду разпределени процеси ● Получаване: – SETNX lock.foo <current Unix time + lock timeout + 1> ● Проверка: – GET lock.foo + проверка дали не е изтекла ● Освобождаване – GETSET lock.foo <current Unix timestamp + lock timeout + 1> + проверка дали не е изтекла – DEL
  • 8.
    Ключове и стойности ●Ключове – няма конкретни изисквания – пример: типът на обекта, идентификатор и/или друга информация, по която се налага да се търси – user:123, logins:2013-03-31, user:123:followers, etc. ● Стойности – обикновени низове (конвертирани до байтове) – сериализиран обект: JSON, Protocol Buffers...
  • 9.
  • 10.
  • 11.
    Приложение на списъците ●Опашка за асинхронно изпълнение на задачи (job queue) – RPUSH, LPOP – BRPUSH, BLPOP: блокиращи аналози ● Реализация на timeline – LPUSH за добавяне – LRANGE за извличане на последните N поста ● „Recently viewed“ – LPUSH – LTRIM n – за премахване на излишните дни
  • 12.
  • 13.
    Тип: set (множество) ●Операции върху множествата – SINTER – сечение ● SINTERSTORE – SUNION – обединение ● SUNIONSTORE – SDIFF – разлика ● SDIFFSTORE
  • 14.
    Приложение на множествата ●Създаване на връзки между обекти (примерно followers, followees) – SADD, SREM с ID на потребителя ● Tagging – По едно множество за всеки tag: „tag:linux“, „tag:programming“, „tag:ruby“ – Всяко множество съхранява ID на статия – SINTER „tag:linux“, „tag:programming“
  • 15.
    Тип: подредени множества (sortedsets) ● Също като Set, но към всеки елемент се присвоява „тегло“, по което се сортира ● Приложение: класации Stefan1 Peter3 Svilen4 ZADD leaderboard 2 Ivan ZRANGE leaderboard 0 -1 1) "Stefan" 2) "Ivan" 3) "Peter" 4) "Svilen" Ivan2 Stefan1 Peter3 Svilen4
  • 16.
    Тип: подредени множества (sortedsets) ● ZRANK, ZREVRANK – на кое място се намира в класацията ● ZREMRANGEBY* - премахва елемент от класацията – RANK – SCORE ● ZINCRBY – увеличава теглото на даден елемент
  • 17.
  • 18.
  • 19.
    Администриране (1) ● Надеждносъхранение на данните – пълно изображение на паметта (snapshoting) – всяка промяна, в append-only файл – комбинирано ● Репликация от тип „master-slave“ – Използва се за мащабируемост (scalability) – Освобождаване на „master“ сървъра от записване на информацията на диска
  • 20.
    Администриране (2) ● Акооперативната памет свърши? – добавяне на още памет – sharding ● Автоматичен failover – инструмент: sentinel ● Позволява upgrade без downtime – чрез репликация ● Конфигуриране без рестартиране
  • 21.
  • 22.