SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Downloaden Sie, um offline zu lesen
 /   / 
REDIS. КАК МЫ БОРОЛИСЬ
СО СЛОЖНОСТЬЮ
Minsk Python Meetup, март 2014
Роман Иманкулов Doist Inc @rdotpy
реализация — linked lists
REDIS LISTS
Python Redis
>>>foo[1]="val" LSETfoo1val
>>>len(foo) LLENfoo
>>>foo.append("val") LPUSHfooval
... и так далее
REDIS SETS
Python Redis
>>>foo={1,2,3,4} SADDfoo1234
>>>set1&set2 SINTERset1set2
>>>set1+set2 SUNIONset1set2
>>>set3=set1+set2 SUNIONSTOREset3set1set2
... и так далее
REDIS HASHES
Python Redis
>>>foo={"spam":1,"egg":2} HMSETfoospam1egg2
>>>foo['spam'] HGETfoospam
>>>'spam'infoo HEXISTSfoospam
>>>foo.setdefault('spam',1) HSETNXfoospam1
... и так далее
USER TIMELINE И ЭКСПОНЕНЦИАЛЬНЫЙ РОСТ ДАННЫХ
USER TIMELINE И ЭКСПОНЕНЦИАЛЬНЫЙ РОСТ ДАННЫХ
USER TIMELINE И ЭКСПОНЕНЦИАЛЬНЫЙ РОСТ ДАННЫХ
USER TIMELINE И ЭКСПОНЕНЦИАЛЬНЫЙ РОСТ ДАННЫХ
fixedlist: решение в пару строк кода
defadd_to_timeline(user_id,record,max_records=100):
"""добавитьновуюзаписьвtimelineпользователя"""
redis.lpush('timeline:%s'%user_id,record)
redis.ltrim('timeline:%s'%user_id,0,max_records)
defget_timeline(user_id):
"""вернутьвсезаписиизtimeline"""
returnredis.lrange("timeline:%s"%user_id,0,-1)
.
АСИНХРОННОЕ ВЫПОЛНЕНИЕ КОМАНД
ускорение загрузки веб-страниц
выравнивание нагрузки на сервер
горизонтальное масштабирование
АСИНХРОННОЕ ВЫПОЛНЕНИЕ КОМАНД
simple_queue: ещё одно решение в пару строк кода
defenqueue(func,*args,**kwargs):
"""помещаемфункциювместесаргументамивочередь"""
queue_name=kwargs.pop('_queue','simple_queue')
redis.lpush(queue_name,pickle.dumps([func,args,kwargs]))
defworker(queue='simple_queue'):
"""получаемиисполняемэлементыизочереди"""
whileTrue:
_,value=redis.brpop(queue)
func,args,kwargs=pickle.loads(value)
printfunc(*args,**kwargs)
.
СБОР И АНАЛИЗ СТАТИСТИКИ. RETENTION ANALYSIS
как понять, что вы на правильном пути
Кто из пользователей, активных в последнюю неделю/месяц/
год, по-прежнему активен?
Кто из сделавших действие X также выполнил действие Y?
Как это изменилось после того, как вы реализовали новую
фишку Z?
СБОР И АНАЛИЗ СТАТИСТИКИ. RETENTION ANALYSIS
битовые операции со строками
#отметимактивностьпользователя12328.03.2014
SETBITactive-2014-03-281231
#проверим,былили123активен1января2014
GETBITactive-2014-01-01123
#посчитемобщееколичествоактивныхпользователей1янв
BITCOUNTactive-2014-01-01
#ктозарегистрировалсявчера,азаплатилсегодня?
BITOPANDpaid-reportsigned-up-2014-03-27paid-2014-03-28
.
СБОР И АНАЛИЗ СТАТИСТИКИ. RETENTION ANALISYS
bitmapist: сбор статистики в Redis
#отметимактивностьпользователя
>>>bitmapist.mark_event('active',123)
#проверим,былли123активен1января2014
>>>activity=bitmapist.DayEvents('active',2014,1,1)
>>>123inactivity
True
#ктозарегистрировалсявчера,азаплатилсегодня?
>>>signed_up=bitmapist.DayEvents('signed_up',2014,3,27)
>>>paid=bitmapist.DayEvents('paid',2014,3,28)
>>>report=bitmapist.BitOpAnd(signed_up,paid)
>>>len(report)
5
СБОР И АНАЛИЗ СТАТИСТИКИ. RETENTION ANALYSIS
bitmapist.cohort: красивые таблички
>>>dates_data=get_dates_data(select1='task:updated',
select2='task:completed',
time_group='days')
>>>html_data=render_html_data(dates_data,time_group='days')
.
БОЛЬШЕ ИНФОРМАЦИИ
Официальная документация Redis
Redis-клиент для Python
Блог автора Redis. Salvatore Sanfilippo aka Antirez
Redis. The Hacker's Database. Выступление Amir S. на pycon.ru
Releasing bitmapist.cohort - or how we saved over $2000/month!
 /   / 
СПАСИБО! ВОПРОСЫ?
Роман Иманкулов Doist Inc @rdotpy

Weitere ähnliche Inhalte

Was ist angesagt?

Алексей Иванов: немного о grunt.js #FrontTalks
Алексей Иванов: немного о grunt.js #FrontTalksАлексей Иванов: немного о grunt.js #FrontTalks
Алексей Иванов: немного о grunt.js #FrontTalks
JetStyle
 
Типичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.jsТипичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.js
Serge Shirokov
 

Was ist angesagt? (13)

Алексей Иванов: немного о grunt.js #FrontTalks
Алексей Иванов: немного о grunt.js #FrontTalksАлексей Иванов: немного о grunt.js #FrontTalks
Алексей Иванов: немного о grunt.js #FrontTalks
 
Паттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolПаттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере Tarantool
 
Android: низкоуровневые мультимедиа API и их применение в реальной жизни
Android: низкоуровневые мультимедиа API и их применение в реальной жизниAndroid: низкоуровневые мультимедиа API и их применение в реальной жизни
Android: низкоуровневые мультимедиа API и их применение в реальной жизни
 
Викторина | Odessa Frontend Meetup #19
Викторина | Odessa Frontend Meetup #19Викторина | Odessa Frontend Meetup #19
Викторина | Odessa Frontend Meetup #19
 
Файлы
ФайлыФайлы
Файлы
 
Использование cygwin для автоматизации процессов тестирования в Windows
Использование cygwin для автоматизации процессов тестирования в WindowsИспользование cygwin для автоматизации процессов тестирования в Windows
Использование cygwin для автоматизации процессов тестирования в Windows
 
Кроссворд Adobe photoshop
Кроссворд Adobe photoshopКроссворд Adobe photoshop
Кроссворд Adobe photoshop
 
Хитрости RAII
Хитрости RAIIХитрости RAII
Хитрости RAII
 
file handling in c
file handling in cfile handling in c
file handling in c
 
Приручаем linux-консоль
Приручаем linux-консольПриручаем linux-консоль
Приручаем linux-консоль
 
Типичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.jsТипичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.js
 
Hf labs education day. rocket science
Hf labs education day. rocket scienceHf labs education day. rocket science
Hf labs education day. rocket science
 
Linux (pipes)
Linux (pipes) Linux (pipes)
Linux (pipes)
 

Andere mochten auch

Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"
Python Meetup
 
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
Python Meetup
 

Andere mochten auch (18)

Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгирование
 
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
 
Обзор фреймворка Twisted
Обзор фреймворка TwistedОбзор фреймворка Twisted
Обзор фреймворка Twisted
 
Про асинхронность / Максим Щепелин / Web Developer Wargaming
Про асинхронность / Максим Щепелин / Web Developer WargamingПро асинхронность / Максим Щепелин / Web Developer Wargaming
Про асинхронность / Максим Щепелин / Web Developer Wargaming
 
Обзор способов написания конкурентных программ в питоне
Обзор способов написания конкурентных программ в питоне Обзор способов написания конкурентных программ в питоне
Обзор способов написания конкурентных программ в питоне
 
Python&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.byPython&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.by
 
Pebble
PebblePebble
Pebble
 
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15] Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"
 
Wargaming: тыл - фронту!
Wargaming: тыл - фронту!Wargaming: тыл - фронту!
Wargaming: тыл - фронту!
 
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
 
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
 Practical Python Packaging / Стас Рудаков / Web Developer Wargaming Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
 
Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...
Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...
Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...
 
Язык программирования GO
Язык программирования GOЯзык программирования GO
Язык программирования GO
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
 
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
 
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
 

Mehr von Python Meetup

Mehr von Python Meetup (12)

Python для анализа данных
Python для анализа данныхPython для анализа данных
Python для анализа данных
 
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
 
Использование gevent для эмуляции высокой нагрузки
Использование gevent для эмуляции высокой нагрузкиИспользование gevent для эмуляции высокой нагрузки
Использование gevent для эмуляции высокой нагрузки
 
Введение в GIL и новый GIL
Введение в GIL и новый GILВведение в GIL и новый GIL
Введение в GIL и новый GIL
 
Недостатки Python
Недостатки PythonНедостатки Python
Недостатки Python
 
Социальный игровой сервер на Python: от первого коммита до продакшена
Социальный игровой сервер на Python: от первого коммита до продакшенаСоциальный игровой сервер на Python: от первого коммита до продакшена
Социальный игровой сервер на Python: от первого коммита до продакшена
 
Портируем на Python 3
Портируем на Python 3Портируем на Python 3
Портируем на Python 3
 
Garbage collector and a bit of memory management
Garbage collector and a bit of memory managementGarbage collector and a bit of memory management
Garbage collector and a bit of memory management
 
Неочевидное поведение некоторых конструкций
Неочевидное поведение некоторых конструкцийНеочевидное поведение некоторых конструкций
Неочевидное поведение некоторых конструкций
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стиль
 
Dictionary в Python. По мотивам Objects/dictnotes.txt
Dictionary в Python. По мотивам Objects/dictnotes.txtDictionary в Python. По мотивам Objects/dictnotes.txt
Dictionary в Python. По мотивам Objects/dictnotes.txt
 
"Внутренности" CPython, часть II
"Внутренности" CPython, часть II"Внутренности" CPython, часть II
"Внутренности" CPython, часть II
 

Redis. Как мы боролись со сложностью