Ускоряем производительность
Python-клиента Redis, используя Golang
Букаткин Юрий
@randomazer
Moscow Python Meetup 58
Slide 2
Slide 2 text
Ускоряем производительность Python-клиента Redis, используя Golang
Slide 3
Slide 3 text
Цель
Быстрый Python-клиент для Redis
Pipeline, Pooling, многопоточность
Простое использование в Python
Читаемость кода
Ускоряем производительность Python-клиента Redis, используя Golang
Slide 4
Slide 4 text
Альтернативы
Ускоряем производительность Python-клиента Redis, используя Golang
Grumpy
Gopy
Go extensions for Python
Slide 5
Slide 5 text
Реализация
Slide 6
Slide 6 text
Ускоряем производительность Python-клиента Redis, используя Golang
Slide 7
Slide 7 text
Ускоряем производительность Python-клиента Redis, используя Golang
Slide 8
Slide 8 text
Ускоряем производительность Python-клиента Redis, используя Golang
Slide 9
Slide 9 text
Build project
Ускоряем производительность Python-клиента Redis, используя Golang
Slide 10
Slide 10 text
Single commands
Slide 11
Slide 11 text
Реализация Python
Ускоряем производительность Python-клиента Redis, используя Golang
Slide 12
Slide 12 text
Тестирование
Ускоряем производительность Python-клиента Redis, используя Golang
Redis-py https://github.com/andymccurdy/redis-py
Credis https://github.com/yihuang/credis
Python + Go (raw realization)
Python + Go (https://github.com/go-redis/redis)
Slide 13
Slide 13 text
Benchmarks
Ускоряем производительность Python-клиента Redis, используя Golang
50000 100000 250000
0
5
10
15
20
25
Credis
Go
Go library
Redis-python
hashmap size
Seconds
Slide 14
Slide 14 text
Pipelining
Slide 15
Slide 15 text
Структура pipeline
Ускоряем производительность Python клиента Redis, используя Golang
hset hashmap key value
*4\r\n$4\r\nhset$7\r\nhashmap$3\r\nkey$5\r\n
value\r\n
Slide 16
Slide 16 text
Реализация Python
Ускоряем производительность Python-клиента Redis, используя Golang
Slide 17
Slide 17 text
Benchmarks hashmap size
Ускоряем производительность Python-клиента Redis, используя Golang
100 500 1000 5000 10000 50000 100000
0
0.5
1
1.5
2
2.5
3
3.5
Credis
Go
Go library
RedisPy
Seconds
Benchmark
Ускоряем производительность Python-клиента Redis, используя Golang
1
0
2
4
6
8
10
12
Aredis
Asyncio redis
Go
Go library
Credis
Seconds
Slide 23
Slide 23 text
Выводы
Slide 24
Slide 24 text
Достоинства
Ускоряем производительность Python-клиента Redis, используя Golang
Ощутимый прирост скорости pipeline и async
Читаемый код на Go
Максимально простое использование в Python
Инкапсуляция всей логики работы библиотеки в Golang
Slide 25
Slide 25 text
Недостатки
Ускоряем производительность Python-клиента Redis, используя Golang
Мало информации
Сложность реализации по сравнению с другими методами
Вся ответственность за результат лежит на разработчике