Redis – это инструмент, который должен быть в арсенале любого разработчика. В докладе Роман расскажет, как Redis помогает Todoist обслуживать сотни тысяч пользователей и подкупает простотой и изяществом своих решений.
Автор: Роман Иманкулов (компания Doist.io).
9. 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)
.
12. СБОР И АНАЛИЗ СТАТИСТИКИ. RETENTION ANALYSIS
как понять, что вы на правильном пути
Кто из пользователей, активных в последнюю неделю/месяц/
год, по-прежнему активен?
Кто из сделавших действие X также выполнил действие Y?
Как это изменилось после того, как вы реализовали новую
фишку Z?
13. СБОР И АНАЛИЗ СТАТИСТИКИ. 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
.
14. СБОР И АНАЛИЗ СТАТИСТИКИ. 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
15. СБОР И АНАЛИЗ СТАТИСТИКИ. 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')
.