SlideShare ist ein Scribd-Unternehmen logo
1 von 60
Downloaden Sie, um offline zu lesen
Обзор Redis storage
Igor Brovchenko
Symfony Camp UA 2011
План

• Что такое Redis


• Возможности


• Типы данных


• Кейсы


• Документация


• Вопросы
REmote DIctionary Server
like memcached on steroids
История

• Автор Salvatore Sanfilippo, @antirez, http://antirez.com/


• Зарелизен в марте 2009


• BSD лицензия


• Спонсируется компанией VMWare


• В марте 2010 VMWare наняла Salvatore


• Позже наняли Pieter Noordhuis (key contributor)
Redis
• Быстрый, простой, легкий key-value storage в памяти


• Разные структуры данных (String, Hash, List, Sets, ZSet)


• Expire для данных


• Персистентность через асинхронные snapshots или AOF


• Master-slave репликация


• Атомарные операции и транзакционность


• Поддержка нескольких DB


• Pub/Sub
Redis

• Написан на ANSI C и работает во многих POSIX системах


• Существует порт для Windows ( https://github.com/dmajkic/redis )


• Очень легко установить и настроить


• Использует память как основной storage


• Диск используется для персистентности


• Single thread (один поток)
Версия
Кто использует Redis




• и многие другие компании - http://redis.io/topics/whos-using-redis
Клиенты               

 
 
 
 
 
             http://redis.io/clients

• redis-cli, telnet


• php


• c, c#


• ruby, python, perl


• java, scala


• Erlang, Go, Haskell, Lua, Node.js


• и многие другие на странице http://redis.io/clients
Клиенты для PHP
   • Predis (https://github.com/nrk/predis)


   • phpredis (https://github.com/nicolasff/phpredis)


   • RedisServer (https://github.com/jamm/Memory/blob/master/)


   • Redisent (https://github.com/jdp/redisent)


   • Rediska (https://github.com/Shumkov/Rediska)


• Symfony 1.x


   • sfRediskaPlugin (https://github.com/mastermix/sfRediskaPlugin)


   • sfRedisPlugin (http://www.symfony-project.org/plugins/sfRedisPlugin)


• Symfony 2


   • SncRedisBundle (https://github.com/snc/SncRedisBundle)


   • RedisBundle (https://github.com/Seldaek/RedisBundle)
Demo                        http://try.redis-db.com/

•




       https://github.com/alexmchale/try.redis
Performance               http://redis.io/topics/benchmarks

• Высокая производительность


• ~50K read/write операций в секунду


• 100K+ read/write операций в секунду на регулярном EC2 instance


• Xeon L5420 clocked at 2.5 GHz 64 bit:

 ~$ ./redis-benchmark -q -n 100000
 PING: 111731.84 requests per second
 SET: 108114.59 requests per second
 GET: 98717.67 requests per second
 INCR: 95241.91 requests per second
 LPUSH: 104712.05 requests per second
 LPOP: 93722.59 requests per second
Persistence - Snapshotting

• # redis.conf
  save 60 1000


• Как это работает: fork, temporary new RDB file, replace the old file


• Надежность


• SAVE
  /opt/local/var/db/redis/dump.rdb


• BGSAVE
  /opt/local/var/db/redis/dump.rdb
Persistence - AOF

• Append-only file


• # redis.conf
  appendonly yes


• Как это работает: при каждом изменении данных, все команды
  записываются в AOF-файл. При перезагрузке Redis - все команды
  перевыполняются до текущего состояния


• AOF файл становится большим


• BGREWRITEAOF - оптимизация AOF
Virtual Memory http://redis.io/topics/virtual-memory

• # redis.conf
  vm-enabled yes


• Позволяет работать данными, которые не помещаются в память


• Прежде чем использовать VM задайте себе вопрос: «Мне действительно
  нужен VM?»


• Redis - это storage для размещения данных в памяти!


• VM позволяет хранить keys в памяти, а values читать из диска
Virtual Memory

• IMPORTANT NOTE: Redis VM is now deprecated. Redis 2.4 will be the
  latest Redis version featuring Virtual Memory (but it also warns you that
  Virtual Memory usage is discouraged). We found that using VM has several
  disadvantages and problems. In the future of Redis we want to simply provide
  the best in-memory database (but persistent on disk as usually) ever, without
  considering at least for now the support for databases bigger than RAM. Our
  future efforts are focused into providing scripting, cluster, and better
  persistence.

 http://redis.io/topics/virtual-memory
Redis Cluster                http://redis.io/topics/cluster-spec

• The Redis core team is already hacking on Redis Cluster. We already have have
  some kind of experimental version in the unstable branch, while a Release
  Candidate or at least a fully working beta is expected for the end of 2011


• Идея


   • распределенность и отказоустойчивость c функционалом stand alone
     сервера


   • Node может выступить как master так и slave


• Презентация http://bit.ly/rcluster


• Branch 2.4 - https://github.com/antirez/redis
Replication                  http://redis.io/topics/replication

• Master-Slaves


• Slaves-Slave (структура в виде графа)


• Репликация является неблокирующей для мастера


• Репликацию можно использовать для масштабируемости: выполнение
  тяжелых операций с SORT или для резервирования данных


• # redis.conf
  slaveof 192.168.1.1 6379


• Команда SYNC
Sharding

• Распределение данных по нескольким серверам


• Временное решение, пока не реализован Redis Cluster




  • Мультиплексный прокси-сервер. Горизонтальное масштабирование


  • https://github.com/kni/redis-sharding (Perl) - проект закрыт


  • http://github.com/kni/redis-sharding-hs (Haskell) => 4x
Databases

• Поддержка нескольких DB


• Настраивается в redis.conf


• 0-15


• По умолчанию DB 0


• SELECT index
redis 127.0.0.1:6379> SELECT 1
OK

redis 127.0.0.1:6379[1]> SET mykey "Hello"
OK

redis 127.0.0.1:6379[1]> GET mykey
"Hello"

redis 127.0.0.1:6379[1]> SELECT 0
OK

redis 127.0.0.1:6379> GET mykey
(nil)

redis 127.0.0.1:6379[1]> SELECT 10
OK

redis 127.0.0.1:6379[10]>
Key-Value Storage
Транзакции

 http://redis.io/topics/transactions

• Все команды сериализируются и выполняются последовательно


• Должны выполниться все команды, либо ни одной


• Команды:

 MULTI   EXEC    DISCARD   WATCH
Keys

• Не бинарно безопасны


• Не должны содержать пробельные символы и rn


• Рекомендации


  • Не использовать слишком длинные keys
    Не использовать слишком короткие keys


  • Как вариант использовать формат keys «object:id:field».
    Например:
      «user:100:name»
      «user:100:email»
Действия над Keys
Типы данных
Strings         		 	 	   http://redis.io/commands#string

• Binary Safe


• Максимум 512 Mb


• Основные команды:

 SET
 GET
 APPEND
 SETEX
 SETNX
 STRLEN
Strings - Use Cases

• Кеширование


  • Инвалидация по признаку (Strings + Sets + DEL)


• Сессии
Integers 	 	 	         http://redis.io/commands#string

• Атомарные счетчики


• Тип данных Strings


• Команды:

 INCR
 INCRBY
 DECR
 DECRBY
Integers - Use Cases

• Счетчики


• Генерация уникального ID
Hashes         	 	 	       http://redis.io/commands#hash

• Напоминает ассоциативный массив в PHP


• Один Hash key и несколько fields


• User => [username => ‘antirez’, password => ‘P1pp0’, age => 34]


• Каждый Hash может хранить 2^32-1 пар field-value


• Основные команды:

 HSET     HGET     HGETALL     HDEL    HVALS     HKEYS     HLEN
Hashes - Use Cases

• Структурные данные (Posts, Users)


• Настройки приложения/пользователя
redis 127.0.0.1:6379> HSET user:1000 username james
(integer) 1

redis 127.0.0.1:6379> HSET user:1000 password bond
(integer) 1

redis 127.0.0.1:6379> HSET user:1000 age 34
(integer) 1

redis 127.0.0.1:6379> HGETALL user:1000
1) "username"
2) "james"
3) "password"
4) "bond"
5) "age"
6) "34"

redis 127.0.0.1:6379> HINCRBY user:1000 age 1
(integer) 35

redis 127.0.0.1:6379> HVALS user:1000
1) "james"
2) "bond"
3) "35"
Sets       		            	 	    http://redis.io/commands#set

• Неупорядоченный набор строк


• tags => [tag5, tag3, tag7,]


• В Set хранится только одна уникальная копия элемента / Набор
  уникальных элементов


• Максимальное количество элементов в Set 2^32-1


• Основные команды:

 SADD      SMEMBERS         SISMEMBER   SREM
Sets - Use Cases

• Подсчет уникальных просмотров поста (IP)


• Списки AD объявлений


• Tags, категории


• Relations (Friends/followers)


• Кто в онлайне
redis 127.0.0.1:6379> SADD news:100:tags tag5
(integer) 1

redis 127.0.0.1:6379> SADD news:100:tags tag3
(integer) 1

redis 127.0.0.1:6379> SADD news:100:tags tag7
(integer) 1

redis 127.0.0.1:6379> SMEMBERS news:100:tags
1) "tag7"
2) "tag3"
3) "tag5"

redis 127.0.0.1:6379> SCARD news:100:tags
(integer) 3

redis 127.0.0.1:6379> SADD news:101:tags tag7
(integer) 1

redis 127.0.0.1:6379> SADD news:101:tags tag12
(integer) 1

redis 127.0.0.1:6379> SINTER news:100:tags news:101:tags
1) "tag7"
Lists 	 	             	 	   http://redis.io/commands#list

• Похожи на Sets, за исключением порядка добавление новых элементов


• Подходят для создания очередей или стеков


• Блокирование


• Основные команды:

 [B]LPUSH   [B]LPOP     LLEN   LINDEX    LRANGE
Lists - Use Cases

• Хранение IDs


• Timeline


  • Очереди или стеки (сообщения, последние комментарии)


  • Логи, статистика


• Background Jobs / Queues

 https://github.com/seatgeek/djjob
 https://github.com/jamm/Tasks
 https://github.com/treffynnon/PHP-at-Job-Queue-Wrapper
 http://www.restmq.com
 https://github.com/defunkt/resque
redis 127.0.0.1:6379> LPUSH mylist "world"
(integer) 1

redis 127.0.0.1:6379> LPUSH mylist "hello"
(integer) 2

redis 127.0.0.1:6379> LRANGE mylist 0 0
1) "hello"

redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "world"
Sorted Sets http://redis.io/commands#sorted_set

• Похожи на Sets, но отсортированы по score значению


• Быстрый доступ по score или диапазону score


• Основные команды:

 ZADD    ZRANGE     ZRANGEBYSCORE       ZREVRANGE
Sorted Sets - Use Cases

• Рейтинг игроков


• Индексы для данных (например, age)


• Индексы по возрастанию/убыванию score


• Cчетчики (downloads, hits, votes)
redis 127.0.0.1:6379> ZADD user:age 34 user1
(integer) 1
redis 127.0.0.1:6379> ZADD user:age 22 user2
(integer) 1
redis 127.0.0.1:6379> ZADD user:age 40 user3
(integer) 1
redis 127.0.0.1:6379> ZADD user:age 25 user4
(integer) 1

redis 127.0.0.1:6379> ZRANGE user:age 1 2
1) "user4"
2) "user1"

redis 127.0.0.1:6379> ZRANGEBYSCORE user:age (25 40
1) "user1"
2) "user3"
Pub/Sub
Pub/Sub                        http://redis.io/topics/pubsub

• В основе парадигма Publish/Subscribe


  • Сообщения публикуются в каналах, не зная ничего о подписчиках


  • Подписчики подписываются на каналы, не задумываясь про
    отправителей


• Команды:

 [P]SUBSCRIBE     PUBLISH    [P]UNSUBSCRIBE
Pub/Sub - Use Cases

• Чат


• Queues


• Логгирование
redis 127.0.0.1:6379> SUBSCRIBE room:chatty
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "room:chatty"
3) (integer) 1


redis 127.0.0.1:6379> PUBLISH room:chatty "Hello there!"
(integer) 1

1) "message"
2) "room:chatty"
3) "Hello there!"

redis 127.0.0.1:6379> UNSUBSCRIBE room:chatty
1) "unsubscribe"
2) "room:chatty"
3) (integer) 0
Документация
Документация   http://redis.io/commands
Интерактивная документация
Professional NoSQL

• Shashank Tiwari


• http://bit.ly/s7wsrl
Redis: The Definitive Guide

• Salvatore Sanfilippo, Pieter Noordhuis


• Released: April 2012


• http://bit.ly/tU6fOD
NoSQL Handbook

• Mathias Meyer


• Released: ????


• A handy and outright awesome ebook guide
  to the world of NoSQL databases. Includes
  heaps of practical material on how to use
  NoSQL databases like Redis, MongoDB,
  CouchDB, Riak and Cassandra.


• http://nosqlhandbook.com/


• @nosqlhandbook
CookBooks

• The Redis cookbook
  http://rediscookbook.org/


• Redis tutorial
  http://simonwillison.net/static/2010/redis-tutorial/


• Redis: under the hood
  http://pauladamsmith.com/articles/redis-under-the-hood.html


• Redis Use Cases
  http://highscalability.com/blog/2010/12/6/what-the-heck-are-you-actually-
  using-nosql-for.html
Документация на русском

• http://pyha.ru/wiki/index.php?title=Redis
Ложка дегтя

• Redis это дополнительное решение. Оно не заменит SQL. Хотя аналог
  Twitter на нем написан


• Redis-сервер - single-threaded. Но можно запустить один Redis-сервер
  на одно свободное ядро


• Redis Cluster еще не готов


• Redis нужно столько памяти - сколько у Вас данных


• Если много данных, то snapshot будет сохранятся на диск долго.
  Используете AOF!


• Не стоит использовать команду «KEYS pattern» на продакшене, она
  предназначена для отладки. Читайте доки!
Вопросы?

• Igor Brovchenko


• @tigordev


• Igor.Brovchenko@gmail.com


• http://ua.linkedin.com/in/IgorBrovchenko


• http://tigor.com.ua

Weitere ähnliche Inhalte

Was ist angesagt?

Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
Архитектура хранения фотографий в Badoo
Архитектура хранения фотографий в BadooАрхитектура хранения фотографий в Badoo
Архитектура хранения фотографий в BadooBadoo Development
 
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2rit2011
 
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)Ontico
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеit-people
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Резервное копирование MySQL в экстремальных условиях
Резервное копирование MySQL в экстремальных условияхРезервное копирование MySQL в экстремальных условиях
Резервное копирование MySQL в экстремальных условияхSveta Smirnova
 
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...Ontico
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Andrey Smirnov
 
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Ontico
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 
Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Ontico
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Ontico
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Ontico
 
Дмитрий Стогов
Дмитрий СтоговДмитрий Стогов
Дмитрий СтоговCodeFest
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Ontico
 
Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Andrey Smirnov
 
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"IT Event
 
Что нужно знать о трёх топовых фичах MySQL
Что нужно знать  о трёх топовых фичах  MySQLЧто нужно знать  о трёх топовых фичах  MySQL
Что нужно знать о трёх топовых фичах MySQLSveta Smirnova
 
Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Andrey Smirnov
 

Was ist angesagt? (20)

Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Архитектура хранения фотографий в Badoo
Архитектура хранения фотографий в BadooАрхитектура хранения фотографий в Badoo
Архитектура хранения фотографий в Badoo
 
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
 
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Резервное копирование MySQL в экстремальных условиях
Резервное копирование MySQL в экстремальных условияхРезервное копирование MySQL в экстремальных условиях
Резервное копирование MySQL в экстремальных условиях
 
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)
 
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
 
Дмитрий Стогов
Дмитрий СтоговДмитрий Стогов
Дмитрий Стогов
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
 
Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)
 
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
 
Что нужно знать о трёх топовых фичах MySQL
Что нужно знать  о трёх топовых фичах  MySQLЧто нужно знать  о трёх топовых фичах  MySQL
Что нужно знать о трёх топовых фичах MySQL
 
Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)
 

Andere mochten auch

Многоязычные сайты на Symfony. Проблемы и их решения
Многоязычные сайты на Symfony. Проблемы и их решенияМногоязычные сайты на Symfony. Проблемы и их решения
Многоязычные сайты на Symfony. Проблемы и их решенияIgor Brovchenko
 
Интернационализация и локализация в Symfony / Symfony I18n And L10n
Интернационализация и локализация в Symfony / Symfony I18n And L10nИнтернационализация и локализация в Symfony / Symfony I18n And L10n
Интернационализация и локализация в Symfony / Symfony I18n And L10nIgor Brovchenko
 
Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Joseph Scott
 
Real-Time Web applications with WebSockets
Real-Time Web applications with WebSocketsReal-Time Web applications with WebSockets
Real-Time Web applications with WebSocketsStanislav Zozulia
 
Let's Get Acquainted: Ansible! / Symfony Camp UA 2014
Let's Get Acquainted: Ansible!  / Symfony Camp UA 2014Let's Get Acquainted: Ansible!  / Symfony Camp UA 2014
Let's Get Acquainted: Ansible! / Symfony Camp UA 2014Igor Brovchenko
 
Юрій Свірський "Місто і стартапи: як грамотно взаємодіяти, щоб сприяти розвит...
Юрій Свірський "Місто і стартапи: як грамотно взаємодіяти, щоб сприяти розвит...Юрій Свірський "Місто і стартапи: як грамотно взаємодіяти, щоб сприяти розвит...
Юрій Свірський "Місто і стартапи: як грамотно взаємодіяти, щоб сприяти розвит...Lviv Startup Club
 
HipHop VM: overclocking Symfony
HipHop VM: overclocking SymfonyHipHop VM: overclocking Symfony
HipHop VM: overclocking SymfonyVadim Borodavko
 

Andere mochten auch (7)

Многоязычные сайты на Symfony. Проблемы и их решения
Многоязычные сайты на Symfony. Проблемы и их решенияМногоязычные сайты на Symfony. Проблемы и их решения
Многоязычные сайты на Symfony. Проблемы и их решения
 
Интернационализация и локализация в Symfony / Symfony I18n And L10n
Интернационализация и локализация в Symfony / Symfony I18n And L10nИнтернационализация и локализация в Symfony / Symfony I18n And L10n
Интернационализация и локализация в Symfony / Symfony I18n And L10n
 
Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )
 
Real-Time Web applications with WebSockets
Real-Time Web applications with WebSocketsReal-Time Web applications with WebSockets
Real-Time Web applications with WebSockets
 
Let's Get Acquainted: Ansible! / Symfony Camp UA 2014
Let's Get Acquainted: Ansible!  / Symfony Camp UA 2014Let's Get Acquainted: Ansible!  / Symfony Camp UA 2014
Let's Get Acquainted: Ansible! / Symfony Camp UA 2014
 
Юрій Свірський "Місто і стартапи: як грамотно взаємодіяти, щоб сприяти розвит...
Юрій Свірський "Місто і стартапи: як грамотно взаємодіяти, щоб сприяти розвит...Юрій Свірський "Місто і стартапи: як грамотно взаємодіяти, щоб сприяти розвит...
Юрій Свірський "Місто і стартапи: як грамотно взаємодіяти, щоб сприяти розвит...
 
HipHop VM: overclocking Symfony
HipHop VM: overclocking SymfonyHipHop VM: overclocking Symfony
HipHop VM: overclocking Symfony
 

Ähnlich wie Обзор Redis storage / Symfony Camp UA 2011

Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)Olga Lavrentieva
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Ontico
 
IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azuremourhoon
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in productionAnatoly Popov
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEBAlexandre Kalendarev
 
Тестирование серверной конфигурации
Тестирование серверной конфигурацииТестирование серверной конфигурации
Тестирование серверной конфигурацииTimur Batyrshin
 
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"Provectus
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Ontico
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ontico
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
Auditing HA/DR Сonfigurations
Auditing HA/DR СonfigurationsAuditing HA/DR Сonfigurations
Auditing HA/DR СonfigurationsAlexey Chekanov
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
Инфраструктура хранения для KADME Whereoil
Инфраструктура хранения для KADME WhereoilИнфраструктура хранения для KADME Whereoil
Инфраструктура хранения для KADME WhereoilVsevolod Shabad
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustMichael Pankov
 
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...it-people
 

Ähnlich wie Обзор Redis storage / Symfony Camp UA 2011 (20)

Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
 
IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azure
 
Redis in live
Redis in liveRedis in live
Redis in live
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
 
Тестирование серверной конфигурации
Тестирование серверной конфигурацииТестирование серверной конфигурации
Тестирование серверной конфигурации
 
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
Auditing HA/DR Сonfigurations
Auditing HA/DR СonfigurationsAuditing HA/DR Сonfigurations
Auditing HA/DR Сonfigurations
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Инфраструктура хранения для KADME Whereoil
Инфраструктура хранения для KADME WhereoilИнфраструктура хранения для KADME Whereoil
Инфраструктура хранения для KADME Whereoil
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
 
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
 

Обзор Redis storage / Symfony Camp UA 2011

  • 1. Обзор Redis storage Igor Brovchenko Symfony Camp UA 2011
  • 2.
  • 3. План • Что такое Redis • Возможности • Типы данных • Кейсы • Документация • Вопросы
  • 5. like memcached on steroids
  • 6. История • Автор Salvatore Sanfilippo, @antirez, http://antirez.com/ • Зарелизен в марте 2009 • BSD лицензия • Спонсируется компанией VMWare • В марте 2010 VMWare наняла Salvatore • Позже наняли Pieter Noordhuis (key contributor)
  • 7. Redis • Быстрый, простой, легкий key-value storage в памяти • Разные структуры данных (String, Hash, List, Sets, ZSet) • Expire для данных • Персистентность через асинхронные snapshots или AOF • Master-slave репликация • Атомарные операции и транзакционность • Поддержка нескольких DB • Pub/Sub
  • 8. Redis • Написан на ANSI C и работает во многих POSIX системах • Существует порт для Windows ( https://github.com/dmajkic/redis ) • Очень легко установить и настроить • Использует память как основной storage • Диск используется для персистентности • Single thread (один поток)
  • 10. Кто использует Redis • и многие другие компании - http://redis.io/topics/whos-using-redis
  • 11. Клиенты http://redis.io/clients • redis-cli, telnet • php • c, c# • ruby, python, perl • java, scala • Erlang, Go, Haskell, Lua, Node.js • и многие другие на странице http://redis.io/clients
  • 12. Клиенты для PHP • Predis (https://github.com/nrk/predis) • phpredis (https://github.com/nicolasff/phpredis) • RedisServer (https://github.com/jamm/Memory/blob/master/) • Redisent (https://github.com/jdp/redisent) • Rediska (https://github.com/Shumkov/Rediska) • Symfony 1.x • sfRediskaPlugin (https://github.com/mastermix/sfRediskaPlugin) • sfRedisPlugin (http://www.symfony-project.org/plugins/sfRedisPlugin) • Symfony 2 • SncRedisBundle (https://github.com/snc/SncRedisBundle) • RedisBundle (https://github.com/Seldaek/RedisBundle)
  • 13. Demo http://try.redis-db.com/ • https://github.com/alexmchale/try.redis
  • 14. Performance http://redis.io/topics/benchmarks • Высокая производительность • ~50K read/write операций в секунду • 100K+ read/write операций в секунду на регулярном EC2 instance • Xeon L5420 clocked at 2.5 GHz 64 bit: ~$ ./redis-benchmark -q -n 100000 PING: 111731.84 requests per second SET: 108114.59 requests per second GET: 98717.67 requests per second INCR: 95241.91 requests per second LPUSH: 104712.05 requests per second LPOP: 93722.59 requests per second
  • 15. Persistence - Snapshotting • # redis.conf save 60 1000 • Как это работает: fork, temporary new RDB file, replace the old file • Надежность • SAVE /opt/local/var/db/redis/dump.rdb • BGSAVE /opt/local/var/db/redis/dump.rdb
  • 16. Persistence - AOF • Append-only file • # redis.conf appendonly yes • Как это работает: при каждом изменении данных, все команды записываются в AOF-файл. При перезагрузке Redis - все команды перевыполняются до текущего состояния • AOF файл становится большим • BGREWRITEAOF - оптимизация AOF
  • 17. Virtual Memory http://redis.io/topics/virtual-memory • # redis.conf vm-enabled yes • Позволяет работать данными, которые не помещаются в память • Прежде чем использовать VM задайте себе вопрос: «Мне действительно нужен VM?» • Redis - это storage для размещения данных в памяти! • VM позволяет хранить keys в памяти, а values читать из диска
  • 18. Virtual Memory • IMPORTANT NOTE: Redis VM is now deprecated. Redis 2.4 will be the latest Redis version featuring Virtual Memory (but it also warns you that Virtual Memory usage is discouraged). We found that using VM has several disadvantages and problems. In the future of Redis we want to simply provide the best in-memory database (but persistent on disk as usually) ever, without considering at least for now the support for databases bigger than RAM. Our future efforts are focused into providing scripting, cluster, and better persistence. http://redis.io/topics/virtual-memory
  • 19. Redis Cluster http://redis.io/topics/cluster-spec • The Redis core team is already hacking on Redis Cluster. We already have have some kind of experimental version in the unstable branch, while a Release Candidate or at least a fully working beta is expected for the end of 2011 • Идея • распределенность и отказоустойчивость c функционалом stand alone сервера • Node может выступить как master так и slave • Презентация http://bit.ly/rcluster • Branch 2.4 - https://github.com/antirez/redis
  • 20. Replication http://redis.io/topics/replication • Master-Slaves • Slaves-Slave (структура в виде графа) • Репликация является неблокирующей для мастера • Репликацию можно использовать для масштабируемости: выполнение тяжелых операций с SORT или для резервирования данных • # redis.conf slaveof 192.168.1.1 6379 • Команда SYNC
  • 21. Sharding • Распределение данных по нескольким серверам • Временное решение, пока не реализован Redis Cluster • Мультиплексный прокси-сервер. Горизонтальное масштабирование • https://github.com/kni/redis-sharding (Perl) - проект закрыт • http://github.com/kni/redis-sharding-hs (Haskell) => 4x
  • 22. Databases • Поддержка нескольких DB • Настраивается в redis.conf • 0-15 • По умолчанию DB 0 • SELECT index
  • 23. redis 127.0.0.1:6379> SELECT 1 OK redis 127.0.0.1:6379[1]> SET mykey "Hello" OK redis 127.0.0.1:6379[1]> GET mykey "Hello" redis 127.0.0.1:6379[1]> SELECT 0 OK redis 127.0.0.1:6379> GET mykey (nil) redis 127.0.0.1:6379[1]> SELECT 10 OK redis 127.0.0.1:6379[10]>
  • 25. Транзакции http://redis.io/topics/transactions • Все команды сериализируются и выполняются последовательно • Должны выполниться все команды, либо ни одной • Команды: MULTI EXEC DISCARD WATCH
  • 26. Keys • Не бинарно безопасны • Не должны содержать пробельные символы и rn • Рекомендации • Не использовать слишком длинные keys Не использовать слишком короткие keys • Как вариант использовать формат keys «object:id:field». Например: «user:100:name» «user:100:email»
  • 29. Strings http://redis.io/commands#string • Binary Safe • Максимум 512 Mb • Основные команды: SET GET APPEND SETEX SETNX STRLEN
  • 30. Strings - Use Cases • Кеширование • Инвалидация по признаку (Strings + Sets + DEL) • Сессии
  • 31. Integers http://redis.io/commands#string • Атомарные счетчики • Тип данных Strings • Команды: INCR INCRBY DECR DECRBY
  • 32. Integers - Use Cases • Счетчики • Генерация уникального ID
  • 33. Hashes http://redis.io/commands#hash • Напоминает ассоциативный массив в PHP • Один Hash key и несколько fields • User => [username => ‘antirez’, password => ‘P1pp0’, age => 34] • Каждый Hash может хранить 2^32-1 пар field-value • Основные команды: HSET HGET HGETALL HDEL HVALS HKEYS HLEN
  • 34. Hashes - Use Cases • Структурные данные (Posts, Users) • Настройки приложения/пользователя
  • 35. redis 127.0.0.1:6379> HSET user:1000 username james (integer) 1 redis 127.0.0.1:6379> HSET user:1000 password bond (integer) 1 redis 127.0.0.1:6379> HSET user:1000 age 34 (integer) 1 redis 127.0.0.1:6379> HGETALL user:1000 1) "username" 2) "james" 3) "password" 4) "bond" 5) "age" 6) "34" redis 127.0.0.1:6379> HINCRBY user:1000 age 1 (integer) 35 redis 127.0.0.1:6379> HVALS user:1000 1) "james" 2) "bond" 3) "35"
  • 36. Sets http://redis.io/commands#set • Неупорядоченный набор строк • tags => [tag5, tag3, tag7,] • В Set хранится только одна уникальная копия элемента / Набор уникальных элементов • Максимальное количество элементов в Set 2^32-1 • Основные команды: SADD SMEMBERS SISMEMBER SREM
  • 37. Sets - Use Cases • Подсчет уникальных просмотров поста (IP) • Списки AD объявлений • Tags, категории • Relations (Friends/followers) • Кто в онлайне
  • 38. redis 127.0.0.1:6379> SADD news:100:tags tag5 (integer) 1 redis 127.0.0.1:6379> SADD news:100:tags tag3 (integer) 1 redis 127.0.0.1:6379> SADD news:100:tags tag7 (integer) 1 redis 127.0.0.1:6379> SMEMBERS news:100:tags 1) "tag7" 2) "tag3" 3) "tag5" redis 127.0.0.1:6379> SCARD news:100:tags (integer) 3 redis 127.0.0.1:6379> SADD news:101:tags tag7 (integer) 1 redis 127.0.0.1:6379> SADD news:101:tags tag12 (integer) 1 redis 127.0.0.1:6379> SINTER news:100:tags news:101:tags 1) "tag7"
  • 39. Lists http://redis.io/commands#list • Похожи на Sets, за исключением порядка добавление новых элементов • Подходят для создания очередей или стеков • Блокирование • Основные команды: [B]LPUSH [B]LPOP LLEN LINDEX LRANGE
  • 40. Lists - Use Cases • Хранение IDs • Timeline • Очереди или стеки (сообщения, последние комментарии) • Логи, статистика • Background Jobs / Queues https://github.com/seatgeek/djjob https://github.com/jamm/Tasks https://github.com/treffynnon/PHP-at-Job-Queue-Wrapper http://www.restmq.com https://github.com/defunkt/resque
  • 41. redis 127.0.0.1:6379> LPUSH mylist "world" (integer) 1 redis 127.0.0.1:6379> LPUSH mylist "hello" (integer) 2 redis 127.0.0.1:6379> LRANGE mylist 0 0 1) "hello" redis 127.0.0.1:6379> LRANGE mylist 0 -1 1) "hello" 2) "world"
  • 42. Sorted Sets http://redis.io/commands#sorted_set • Похожи на Sets, но отсортированы по score значению • Быстрый доступ по score или диапазону score • Основные команды: ZADD ZRANGE ZRANGEBYSCORE ZREVRANGE
  • 43. Sorted Sets - Use Cases • Рейтинг игроков • Индексы для данных (например, age) • Индексы по возрастанию/убыванию score • Cчетчики (downloads, hits, votes)
  • 44. redis 127.0.0.1:6379> ZADD user:age 34 user1 (integer) 1 redis 127.0.0.1:6379> ZADD user:age 22 user2 (integer) 1 redis 127.0.0.1:6379> ZADD user:age 40 user3 (integer) 1 redis 127.0.0.1:6379> ZADD user:age 25 user4 (integer) 1 redis 127.0.0.1:6379> ZRANGE user:age 1 2 1) "user4" 2) "user1" redis 127.0.0.1:6379> ZRANGEBYSCORE user:age (25 40 1) "user1" 2) "user3"
  • 46. Pub/Sub http://redis.io/topics/pubsub • В основе парадигма Publish/Subscribe • Сообщения публикуются в каналах, не зная ничего о подписчиках • Подписчики подписываются на каналы, не задумываясь про отправителей • Команды: [P]SUBSCRIBE PUBLISH [P]UNSUBSCRIBE
  • 47. Pub/Sub - Use Cases • Чат • Queues • Логгирование
  • 48. redis 127.0.0.1:6379> SUBSCRIBE room:chatty Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "room:chatty" 3) (integer) 1 redis 127.0.0.1:6379> PUBLISH room:chatty "Hello there!" (integer) 1 1) "message" 2) "room:chatty" 3) "Hello there!" redis 127.0.0.1:6379> UNSUBSCRIBE room:chatty 1) "unsubscribe" 2) "room:chatty" 3) (integer) 0
  • 50. Документация http://redis.io/commands
  • 52. Professional NoSQL • Shashank Tiwari • http://bit.ly/s7wsrl
  • 53. Redis: The Definitive Guide • Salvatore Sanfilippo, Pieter Noordhuis • Released: April 2012 • http://bit.ly/tU6fOD
  • 54. NoSQL Handbook • Mathias Meyer • Released: ???? • A handy and outright awesome ebook guide to the world of NoSQL databases. Includes heaps of practical material on how to use NoSQL databases like Redis, MongoDB, CouchDB, Riak and Cassandra. • http://nosqlhandbook.com/ • @nosqlhandbook
  • 55. CookBooks • The Redis cookbook http://rediscookbook.org/ • Redis tutorial http://simonwillison.net/static/2010/redis-tutorial/ • Redis: under the hood http://pauladamsmith.com/articles/redis-under-the-hood.html • Redis Use Cases http://highscalability.com/blog/2010/12/6/what-the-heck-are-you-actually- using-nosql-for.html
  • 56. Документация на русском • http://pyha.ru/wiki/index.php?title=Redis
  • 57.
  • 58.
  • 59. Ложка дегтя • Redis это дополнительное решение. Оно не заменит SQL. Хотя аналог Twitter на нем написан • Redis-сервер - single-threaded. Но можно запустить один Redis-сервер на одно свободное ядро • Redis Cluster еще не готов • Redis нужно столько памяти - сколько у Вас данных • Если много данных, то snapshot будет сохранятся на диск долго. Используете AOF! • Не стоит использовать команду «KEYS pattern» на продакшене, она предназначена для отладки. Читайте доки!
  • 60. Вопросы? • Igor Brovchenko • @tigordev • Igor.Brovchenko@gmail.com • http://ua.linkedin.com/in/IgorBrovchenko • http://tigor.com.ua

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n