Прочитайте оригинал на codethat.today
Программное обеспечение с открытым исходным кодом, по определению, открыто для проверки, изменения и внесения вклад. Это создало только процветающее сообщество и экосистему обмена и сотрудничества между учеными, предприятиями и частными лицами.
В настоящее время крупнейшие в мире организации полагаются на программное обеспечение с открытым исходным кодом для повседневных операций. Многие из них также проводят его на следующий уровень, открывая их внутреннее инструменты и создавая большую полезность. Некоторые плодовитые примеры включают Апач Кассандра и Кафка Анкет
В этой серии мы собираемся исследовать популярные и подлинные проекты с открытым исходным кодом, поговорить об их истории и взглянуть на их архитектуру. Мы стремимся помочь будущим участникам или заинтересованным сторонам, лучше понять их структуру, их использование, логику, рассуждения и их ограничения. В конце концов, программное обеспечение предназначено для чтения и поддержания, если оно имеет право продлиться со временем.
Давайте запустим нашу серию с исключительно интересным проектом, который является Redis-Py который является клиентом Redis Python. В первой части мы собираемся ходить, хотя проектная документация, структура и история GIT. В следующей части мы подробно рассказываем о том, как его установить и использовать, структуру и анализ кода, как тестировать и как внести свой вклад.
Давайте начнем.
Обзор
Проект перечислен на GitHub . Это также перечислено в Индекс пакетов PYPI А последняя версия – 3.3.8, которая была выпущена 19 августа 2019 года.
Repo Github имеет более 7800 звезд, что очень хорошо И это поддерживается Энди МакКарди Анкет
Документация
Документы перечислены в Readthedocs Repo Хотя это одна большая справочная страница, так что это довольно грубо. Большая часть официальной документации находится в Readme file Анкет
В целом документация обширная, но это может помочь, если бы у нас было больше примеров.
Структура папки
Проект следует за традиционной структурой проекта Python:
➜ tree . . ├── CHANGES ├── INSTALL ├── LICENSE ├── MANIFEST.in ├── README.rst ├── RELEASE ├── benchmarks │ ├── __init__.py │ ├── base.py │ ├── basic_operations.py │ ├── command_packer_benchmark.py │ └── socket_read_size.py ├── build_tools │ ├── bootstrap.sh │ ├── build_redis.sh │ ├── install_redis.sh │ ├── install_sentinel.sh │ ├── redis-configs │ │ ├── 001-master │ │ └── 002-slave │ ├── redis_init_script │ ├── redis_vars.sh │ ├── sentinel-configs │ │ ├── 001-1 │ │ ├── 002-2 │ │ └── 003-3 │ └── sentinel_init_script ├── docs │ ├── Makefile │ ├── _static │ ├── _templates │ ├── conf.py │ ├── index.rst │ └── make.bat ├── redis │ ├── __init__.py │ ├── _compat.py │ ├── client.py │ ├── connection.py │ ├── exceptions.py │ ├── lock.py │ ├── sentinel.py │ └── utils.py ├── setup.cfg ├── setup.py ├── tests │ ├── __init__.py │ ├── conftest.py │ ├── test_commands.py │ ├── test_connection_pool.py │ ├── test_encoding.py │ ├── test_lock.py │ ├── test_monitor.py │ ├── test_multiprocessing.py │ ├── test_pipeline.py │ ├── test_pubsub.py │ ├── test_scripting.py │ └── test_sentinel.py ├── tox.ini └── vagrant └── Vagrantfile 10 directories, 51 files
Вот прорыв папок:
тесты
: Содержит тесты на сравнительных показателях для наиболее важных операций.Документы
: Содержит активы для сайта документации на ReadThedocs, которые он использует SPHINX DOCS АнкетТесты
: Содержит основной тестовый набор.build_tools
: Содержит сценарии предоставления для Vagrantfile расположен в папке. Это используется для запуска Redis и Redis Sentinel внутри виртуальной машины.Redis
: Содержит основной исходный код клиентской библиотеки.
Важные файлы проекта
Файлы уровня проекта:
ИЗМЕНЕНИЯ
: Чанэлог проекта. Он имеет информацию, начиная с V2.2.0 до последних.Выпуск
: Информация о процессе выпуска. Это очень просто и ясно.Установить
: Информация о том, как установить библиотеку. Рекомендуется использовать инструменты настройки Python:
python setup.py install
Readme.rst
: Документация Readme проекта.Лицензия
: MIT Лицензияsetup.py
: Файл настройки для установки и выпуска проекта. Он указывает поддержку следующих версий Python:
python_requires = “> = 2,7, .0.*,. 1.*,. 2.*,. 3. *”,
Для тестирования это требует питест
и макет
:
tests_require=[ 'mock', 'pytest>=2.7.0', ],
Если вы заметили, что это требует hierdis
который является минималистичным клиентом Redis, написанным в C:
extras_require={ 'hiredis': [ "hiredis>=0.1.3", ], },
Как упомянуто в ReadMe, по умолчанию Redis-Py
попытается использовать Hiredisparser
включено в Улишки
Модуль и выпадет на Pythonparser
в противном случае. Это связано исключительно по соображениям производительности, так как lehieRis может обеспечить 10 -кратное улучшение скорости в ответах на сервер Redis.
GIT ИСТОРИЯ
Проект имеет хорошую статистику с более чем 1300 коммитами и 174 участниками:
История коммита распространяется на протяжении многих лет с некоторыми случайными шипами. Вот 4 лучших участников:
Проект начался в 1 ноября 2009 года, который через несколько месяцев после того, как Редис родился 22 марта 2009 года.
Самые ранние релизы начинаются с v2.4.6 который после 273 -го коммита.
Важные вопросы
Мы исследуем некоторые из важных вопросов, которые записаны в трекере выпуска репо.
В настоящее время проект имеет 140 открытых вопросов из 556 All вместе, что довольно высока. У него довольно много открытых запросов (57), и последний объединенный коммит был сделан 20 дней назад.
Вот разрушение 10 самых похвальных PRS:
Большинство из этих PRS не являются обязательными и не нужны, как оценили Энди.
Вот разрушение 10 самых похвальных вопросов:
Похоже, что после выпуска 3.2.0 были некоторые проблемы с подключением с библиотекой в определенных сценариях. Если мы посмотрим на ChangeLog для этой версии:
- Добавлена поддержка
SELECT.POLL
Чтобы проверить, можно ли прочитать данные в розетке. Это должно позволить значительно больше соединений использоваться с Pubsub. Исправляет #486/#1115
Это было серьезное изменение, потому что оно меняет Выберите
Стратегия при опросе на изменения от гнезда.
Другими проблемами являются спорадические проблемы с соединением.
Монтаж
Теперь, когда мы хорошо понимаем детали проекта, давайте попробуем установить его и запустить его в реплике.
Сначала вам нужно установить Redis. Следуйте за этим Инструкции здесь Анкет
Затем создайте тестовую папку и виртуальную Env Python:
$ python3 -m venv .env source .env/bin/activate
Клонировать репозиторий и запустите процесс настройки:
$ git clone git@github.com:andymccurdy/redis-py.git && cd redis $ python setup.py develop $ pip install hiredis
В другом терминале запустите сервер Redis:
$ redis-server &
Убедитесь, что вы можете подключиться к серверу, используя Redis-cli
инструмент:
➜ redis-cli 127.0.0.1:6379> INFO # Server redis_version:5.0.0 ...
Теперь давайте начнем спильку Python и попробуем запустить несколько запросов с Redis.py:
$ python3 Python 3.7.3 (default, Mar 27 2019, 09:23:39) [Clang 10.0.0 (clang-1000.11.45.5)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import redis >>> r = redis.Redis(host='localhost', port=6379, db=0) >>> r Redis>> >>> r.hset("dictionary", "Abate", "become less intense or widespread") 1 >>> r.hget("dictionary", "Abate") b'become less intense or widespread' >>> r.hkeys("dictionary") [b'Abate']
Большинство команд имеют одинаковое имя с Список команд Redis
Следующая часть
В следующей части этой серии мы идем более глубокими и исследуем код, который запускает библиотеку. Надеюсь, мы сможем выучить удивительные архитектурные узоры и уловки.
Оригинал: “https://dev.to/theodesp/exploring-open-source-architectures-redis-py-3en6”