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