За мен
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
Основни команди (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...
Приложение на списъците
●Опашка за асинхронно изпълнение на
задачи (job queue)
– RPUSH, LPOP
– BRPUSH, BLPOP: блокиращи аналози
● Реализация на timeline
– LPUSH за добавяне
– LRANGE за извличане на последните N поста
● „Recently viewed“
– LPUSH
– LTRIM n – за премахване на излишните дни
Тип: 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 – увеличава теглото на даден
елемент
Администриране (1)
● Надеждносъхранение на данните
– пълно изображение на паметта (snapshoting)
– всяка промяна, в append-only файл
– комбинирано
● Репликация от тип „master-slave“
– Използва се за мащабируемост (scalability)
– Освобождаване на „master“ сървъра от
записване на информацията на диска
20.
Администриране (2)
● Акооперативната памет свърши?
– добавяне на още памет
– sharding
● Автоматичен failover
– инструмент: sentinel
● Позволява upgrade без downtime
– чрез репликация
● Конфигуриране без рестартиране