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

9,675 views

Published on

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,675
On SlideShare
0
From Embeds
0
Number of Embeds
662
Actions
Shares
0
Downloads
45
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

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

  1. 1. 1. Моделирование системы персестирования данных2. Redis: возможности, выгоды, примеры использования Алексей Качаев Zend_Coffee&Code #3 Июль, 2011
  2. 2. Алексей КачаевSenior/Lead PHP Developer atCogniance4+ года опыта c PHP3+ года использования ZendFrameworkАктивный участникzendframework.ru/forumZF2 contributor
  3. 3. Мои контактыBlog:codemehanika.orgEmail:kachayev@gmail.comTwitter:@kachayevFacebook:http://www.facebook.com/kachayevGithub:https://github.com/kachayev
  4. 4. О чем мы будем говорить1. Что такое моделирование данных и при чем здесь DDD,DataMappers и т.д.2. SQL, noSQL, lessSQL.3. TTL, read/write rate, I/O, партицирование и шардинг.4. Redis как пример key-value storage.5. Mongo как пример документо-ориентированногохранилища.
  5. 5. Что такое моделирование данных
  6. 6. Независимость кода от хранилищаМногие паттерны диктуют НЕЗАВИСИМОТЬХРАНИЛИЩА.К сожалению, для многих это так и остается простодекларацией выгоды паттернов.Плохо: создавать объекты по полям в таблице базы.Плохо: создавать поля в таблице по свойствам объекта.Нужно: понимать, что НЕЗАВИСИМОСТЬ должна бытьДВУХСТОРОННАЯ.
  7. 7. SQL, noSQL, lessSQL
  8. 8. MySQL - это не приговор, а NoSQL несуществует1. Key-value (Redis, Scalaris, TC, MemcacheDB)2. Документ (MongoDB, CouchDB, Riak)3. Семейства столбцов (Cassandra, HBase)4. Граф (Neo4J)Зачем?- скорость- ресурсо-затратность- масштабируемость- доп. возможностиГлавное:Моделировать по логике, а не по sql-ности.
  9. 9. Характеристики данных
  10. 10. TTLTTL = Time To Live -> среднее время между обновлениеединицы данных.Почему это важно?1. Кеширование2. TTL составной ноды информации = min(TTL частей)Пример.1. Пользователи и их комментарии. JOIN отменяется.2. Количество просмотров и попаданий в поисковуювыдачу. Прощай кеш объявлений.
  11. 11. Read/write rateМало пишем, много читаем - SQL.Много пишем, редко читаем - NoSQL.Почему:1. Персистентность и I/O2. Индексы3. LocksНапример:1. Статистика, аналитика2. Real-time data3. Действия пользователей и т.д.
  12. 12. I/OРесурс, о котором всегда забывают.Верхний предел существует и постоянно уменьшается.Примеры:1. Сессии2. Крупные блоки данных3. Конкурентность I/O
  13. 13. Конкурентность доступа1. Locks при write операциях (запись, таблица)2. "Выдавливаение" кеша из ограниченного стека3. Атомарность или почему GET X; SET X+1 не работает.
  14. 14. Redis. Возможности,выгоды, использование
  15. 15. Что такое Redis?http://redis.ioНе только key-value storage.1. Очень большая скорость get/set операций2. Expire для ключей3. Асинхронная персистентность4. Типы данных с внутренней оптимизацией5. Репликация master-slave с поддержкой ветвления6. Атомарные операции и транзакционность7. Pub/sub
  16. 16. Установкаsudo -scd /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
  17. 17. SupervisorОтключить встроенную демонизацию!/etc/supervisor/conf.d/redis.conf[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
  18. 18. Типы данных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 set5. Hashes
  19. 19. 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
  20. 20. Redis HashСуть: неупорядоченный набор соответствий между field иvalue.Удобно для: хранения объектов по одному ключуСложность: Добавить, удалить, проверить поле - O(1),перебрать все поля и/или значения - O(n)Внутренняя реализация: для "маленьких" хешей - zipmap(медленнее, но компактно), для "больших" - hash table(быстро, но много)Команды:HSET key field value; HGET key fieldHMGET key field1 ... fieldN; HMSET key field1 value1 ... fieldN valueN HINCRBY key field integerHEXISTS key field; HDEL key field; HLEN keyHKEYS key; HVALS key; HGETALL key
  21. 21. Скорость, I/O и fsyncСкорость до 100.000 записей в секунду. Чтениемедленнее, чем запись в большинстве случаев.Два механизма персестирования:1. Snapshotsave 300 1000dbfilename /var/redis/dump.rdb2. AOFappendonly yes|noappendfsync always|everysec|noОба персистера работают на уровне форка процесса.Механизм VM, SWAP и работа при дефиците (илиискусственном ограничении) оперативной памяти.
  22. 22. Атомарность операций и транзакцииАтомарные счетчики: INCR, INCRBY, DECR, DECRBYТранзакции:1. Все команды сериализуются и выполняютсяпоследовательно2. Выполняются либо все команды, либо ни однойКоманды:MULTI....EXEC or DISCARD (транзакция)WATCH key....MULTI....EXEC (оптимистичная блокировка)
  23. 23. Использование Rediska + Zend
  24. 24. Использование Rediska + Zend
  25. 25. Решение специфических задач0. Генерирование уникального ID для сущности при работена нескольких серверах1. Последнии 10 добавленных комментариев всемипользователями (LPUSH, LRANGE)2. Рейтинг игроков (ZADD, ZREVRANGE)http://codemehanika.org/blog/2011-07-15-redis-types-usage.html3. Подсчет уникальных посетителей (SADD, SCARD)4. Pub/sub, очереди, кеширование
  26. 26. Мониторинг, деббаг и другоеREDIS-CLI или TELNET1. info, dbsize2. monitor3. debug object4. config get|set5. flushall, flushdb6. bgsave, bgrewriteaof7. slowlog
  27. 27. Спасибо за внимание! Вопросы ???

×