redis: возможности, выгоды, примеры использования

27
1. Моделирование системы персестирования данных 2. Redis: возможности, выгоды, примеры использования Алексей Качаев Zend_Coffee&Code #3 Июль, 2011

Upload: alexey-kachayev

Post on 16-Jun-2015

7.527 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: Redis: возможности, выгоды, примеры использования

1. Моделирование системы персестирования данных

2. Redis: возможности, выгоды, примеры

использования

Алексей КачаевZend_Coffee&Code #3

Июль, 2011

Page 2: Redis: возможности, выгоды, примеры использования

Алексей Качаев

Senior/Lead PHP Developer at Cogniance

4+ года опыта c PHP

3+ года использования Zend Framework

Активный участник zendframework.ru/forum

ZF2 contributor

Page 3: Redis: возможности, выгоды, примеры использования

Мои контакты

Blog:codemehanika.org

Email:[email protected]

Twitter:@kachayev

Facebook:http://www.facebook.com/kachayev

Github:https://github.com/kachayev

Page 4: Redis: возможности, выгоды, примеры использования

О чем мы будем говорить

1. Что такое моделирование данных и при чем здесь DDD, DataMappers и т.д.

2. SQL, noSQL, lessSQL.

3. TTL, read/write rate, I/O, партицирование и шардинг.

4. Redis как пример key-value storage.

5. Mongo как пример документо-ориентированного хранилища.

Page 5: Redis: возможности, выгоды, примеры использования

Что такое моделирование данных

Page 6: Redis: возможности, выгоды, примеры использования

Независимость кода от хранилищаМногие паттерны диктуют НЕЗАВИСИМОТЬ ХРАНИЛИЩА. 

К сожалению, для многих это так и остается просто декларацией выгоды паттернов.

Плохо: создавать объекты по полям в таблице базы.Плохо: создавать поля в таблице по свойствам объекта.

Нужно: понимать, что НЕЗАВИСИМОСТЬ должна быть ДВУХСТОРОННАЯ.

Page 7: Redis: возможности, выгоды, примеры использования

SQL, noSQL, lessSQL

Page 8: Redis: возможности, выгоды, примеры использования

MySQL - это не приговор, а NoSQL не существует

1. Key-value (Redis, Scalaris, TC, MemcacheDB)2. Документ (MongoDB, CouchDB, Riak)3. Семейства столбцов (Cassandra, HBase)4. Граф (Neo4J)

Зачем?- скорость- ресурсо-затратность- масштабируемость- доп. возможности

Главное:Моделировать по логике, а не по sql-ности.

Page 9: Redis: возможности, выгоды, примеры использования

Характеристики данных

Page 10: Redis: возможности, выгоды, примеры использования

TTL

TTL = Time To Live -> среднее время между обновление единицы данных.

Почему это важно?1. Кеширование2. TTL составной ноды информации = min(TTL частей)

Пример. 

1. Пользователи и их комментарии. JOIN отменяется.

2. Количество просмотров и попаданий в поисковую выдачу. Прощай кеш объявлений.

Page 11: Redis: возможности, выгоды, примеры использования

Read/write rate

Мало пишем, много читаем - SQL.Много пишем, редко читаем - NoSQL. 

Почему:1. Персистентность и I/O2. Индексы3. Locks

Например:1. Статистика, аналитика2. Real-time data3. Действия пользователей и т.д.

Page 12: Redis: возможности, выгоды, примеры использования

I/O   

Ресурс, о котором всегда забывают.Верхний предел существует и постоянно уменьшается.

Примеры: 

1. Сессии2. Крупные блоки данных3. Конкурентность I/O

Page 13: Redis: возможности, выгоды, примеры использования

Конкурентность доступа

1. Locks при write операциях (запись, таблица)

2. "Выдавливаение" кеша из ограниченного стека

3. Атомарность или почему GET X; SET X+1 не работает.

Page 14: Redis: возможности, выгоды, примеры использования

Redis. Возможности, выгоды, использование

Page 15: Redis: возможности, выгоды, примеры использования

Что такое Redis?

http://redis.io

Не только key-value storage.

1. Очень большая скорость get/set операций2. Expire для ключей3. Асинхронная персистентность4. Типы данных с внутренней оптимизацией5. Репликация master-slave с поддержкой ветвления6. Атомарные операции и транзакционность7. Pub/sub

Page 16: Redis: возможности, выгоды, примеры использования

Установка

sudo -s

cd /usr/local/libwget http://redis.googlecode.com/files/redis-2.2.11.tar.gztar xvzf redis-2.2.11.tar.gzcd redis-2.2.11make

## sysctl vm.overcommit_memory=1ln -s /usr/local/lib/redis-2.2.11/redis-server /usr/bin/redis-server

Page 17: Redis: возможности, выгоды, примеры использования

Supervisor

[program:redis]command=/usr/bin/redis-server /etc/redis/redis.confpriority=10autorestart=trueautostart=truestartsecs=10startretries=3stopsignal=QUITstopwaitsecs=10redirect_stderr=truestdout_logfile=/var/log/redis.logstdout_logfile_maxbytes=10MB

Отключить встроенную демонизацию!

/etc/supervisor/conf.d/redis.conf

Page 18: Redis: возможности, выгоды, примеры использования

Типы данных

1. BS String (get, set, incr, incrby, getset, до 1 гб)

2. List (связанный список, добавление O(1), захват по индексу O(n), [push | pop | insert], [set | index | rem], [range | trim])

3. Set (неупорядоченный набор строк,  хеш-таблица, сложность операций O(1), resize таблицы блокирующий, [sadd | srem | sismember | smove | spop], scard, smembers, [sdiff | sunion | sinter])

4. Sorted set

5. Hashes

Page 19: Redis: возможности, выгоды, примеры использования

Sorted Set

Суть: коллекция строк с ассоциированными числамиСкорость: получение элемента по оценке - O(1), обновеить значение оценки - O(n)Внутренняя реализация: через двойную структуру (двунаправленный список+хеш-таблица)

Команды:ZADD key score member; ZREM key member; ZINCRBY key increment memberZRANK key member; ZREVRANK key member; ZRANGE key start end; ZREVRANGE key start end; ZRANGEBYSCORE key min max; ZCOUNT key min max;ZCARD key; ZSCORE key element;ZREMRANGEBYRANK key min max; ZREMRANGEBYSCORE key min max

Page 20: Redis: возможности, выгоды, примеры использования

Redis HashСуть: неупорядоченный набор соответствий между field и value.Удобно для: хранения объектов по одному ключуСложность: Добавить, удалить, проверить поле - O(1), перебрать все поля и/или значения - O(n)Внутренняя реализация: для "маленьких" хешей - zipmap (медленнее, но компактно), для "больших" - hash table (быстро, но много)

Команды:

HSET key field value; HGET key field HMGET key field1 ... fieldN; HMSET key field1 value1 ... fieldN valueN HINCRBY key field integerHEXISTS key field; HDEL key field; HLEN key HKEYS key; HVALS key; HGETALL key

Page 21: Redis: возможности, выгоды, примеры использования

Скорость, I/O и fsyncСкорость до 100.000 записей в секунду. Чтение медленнее, чем запись в большинстве случаев.

Два механизма персестирования: 1. Snapshotsave 300 1000 dbfilename /var/redis/dump.rdb2. AOF appendonly yes|noappendfsync always|everysec|no

Оба персистера работают на уровне форка процесса.

Механизм VM, SWAP и работа при дефиците (или искусственном ограничении) оперативной памяти.

Page 22: Redis: возможности, выгоды, примеры использования

Атомарность операций и транзакцииАтомарные счетчики: INCR, INCRBY, DECR, DECRBY

Транзакции:1. Все команды сериализуются и выполняются последовательно2. Выполняются либо все команды, либо ни одной

Команды: MULTI....EXEC or DISCARD (транзакция)

WATCH key....MULTI....EXEC (оптимистичная блокировка)

Page 23: Redis: возможности, выгоды, примеры использования

Использование Rediska + Zend

Page 24: Redis: возможности, выгоды, примеры использования

Использование Rediska + Zend

Page 25: Redis: возможности, выгоды, примеры использования

Решение специфических задач

0. Генерирование уникального ID для сущности при работе на нескольких серверах

1. Последнии 10 добавленных комментариев всеми пользователями (LPUSH, LRANGE)

2. Рейтинг игроков (ZADD, ZREVRANGE)http://codemehanika.org/blog/2011-07-15-redis-types-usage.html

3. Подсчет уникальных посетителей (SADD, SCARD)

4. Pub/sub, очереди, кеширование

Page 26: Redis: возможности, выгоды, примеры использования

Мониторинг, деббаг и другое

REDIS-CLI или TELNET

1. info, dbsize2. monitor3. debug object4. config get|set5. flushall, flushdb6. bgsave, bgrewriteaof7. slowlog

Page 27: Redis: возможности, выгоды, примеры использования

Спасибо за внимание!

Вопросы???