Разные структуры данных (String, Hash, List, Sets, ZSet) • Expire для данных • Персистентность через асинхронные snapshots или AOF • Master-slave репликация • Атомарные операции и транзакционность • Поддержка нескольких DB • Pub/Sub
POSIX системах • Существует порт для Windows ( https://github.com/dmajkic/redis ) • Очень легко установить и настроить • Использует память как основной storage • Диск используется для персистентности • Single thread (один поток)
секунду • 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
Как это работает: 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
yes • Как это работает: при каждом изменении данных, все команды записываются в AOF-файл. При перезагрузке Redis - все команды перевыполняются до текущего состояния • AOF файл становится большим • BGREWRITEAOF - оптимизация AOF
работать данными, которые не помещаются в память • Прежде чем использовать VM задайте себе вопрос: «Мне действительно нужен VM?» • Redis - это storage для размещения данных в памяти! • VM позволяет хранить keys в памяти, а values читать из диска
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
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
• Репликация является неблокирующей для мастера • Репликацию можно использовать для масштабируемости: выполнение тяжелых операций с SORT или для резервирования данных • # redis.conf slaveof 192.168.1.1 6379 • Команда SYNC
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]>
символы и \r\n • Рекомендации • Не использовать слишком длинные keys Не использовать слишком короткие keys • Как вариант использовать формат keys «object:id:field». Например: «user:100:name» «user:100:email»
Hash key и несколько fields • User => [username => ‘antirez’, password => ‘P1pp0’, age => 34] • Каждый Hash может хранить 2^32-1 пар field-value • Основные команды: HSET HGET HGETALL HDEL HVALS HKEYS HLEN
tag3, tag7,] • В Set хранится только одна уникальная копия элемента / Набор уникальных элементов • Максимальное количество элементов в Set 2^32-1 • Основные команды: SADD SMEMBERS SISMEMBER SREM
в каналах, не зная ничего о подписчиках • Подписчики подписываются на каналы, не задумываясь про отправителей • Команды: [P]SUBSCRIBE PUBLISH [P]UNSUBSCRIBE
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
• 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
SQL. Хотя аналог Twitter на нем написан • Redis-сервер - single-threaded. Но можно запустить один Redis-сервер на одно свободное ядро • Redis Cluster еще не готов • Redis нужно столько памяти - сколько у Вас данных • Если много данных, то snapshot будет сохранятся на диск долго. Используете AOF! • Не стоит использовать команду «KEYS pattern» на продакшене, она предназначена для отладки. Читайте доки!