Redis

Este módulo provê suporte para conectar a servidores Redis (ou Valkey) através da biblioteca Redis.

Utilização

Primeiro instale o extra redis:

$ pip install zayt[redis]

Defina as propriedades de configuração:

settings = {
    "modules": [
        "zayt.ext.redis", # (1)
    ],
    "redis": {
        "": { # (2)
            "url": "redis://localhost:6379/0",
        },
        "other": { # (3)
            "url": "redis://localhost:6379/1",
        },
    },
}

Nota

  1. Ativar o módulo

  2. Connection will be registered without a name

  3. Conexão registrada sem com nome “other”

Injete o serviço redis.asyncio.Redis:

from typing import Annotated
from redis.asyncio import Redis
from zayt.di import service, Inject


@service
class MyService:
    # default service
    redis: Annotated[Redis, Inject]

    # named service
    other_redis: Annotated[Redis, Inject("other")]

Conexões Redis também podem ser definidas com usuário e senha separadas da url, ou então como componentes individuais:

settings = {
    "redis": {
        "url_username_password": { # (1)
            "url": "redis://localhost:6379/0",
            "username": "user",
            "password": "pass",
        },
        "individual_components": { # (2)
            "host": "localhost",
            "port": 6379,
            "db": 0,
            "username": "user",
            "password": "pass",
        },
    },
}

Nota

  1. Usuário e senha separados da url do redis

  2. Cada componente definido individualmente

Exemplo

application/handler.py
from redis.asyncio import Redis
from zayt.web import get

@get
async def index(request, redis: Redis):
    number = await redis.incr("number")
    await request.respond_json({"number": number})
configuration/settings.py
settings = {
    "redis": {
        "": {
            "url": "redis://localhost:6379/0",
        },
    },
}

Opções de configuração

As opções disponíveis são mostradas abaixo:

settings = {
    "redis": {
        "": {
            "url": "",
            "host": "",
            "port": 6379,
            "db": 0,
            "username": "",
            "password": "",
            "options": {
                "socket_timeout": 1.0,
                "socket_connect_timeout": 1.0,
                "socket_keepalive": False,
                "socket_keepalive_options": {},
                "unix_socket_path": "",
                "encoding": "",
                "encoding_errors": "strict",  # "ignore", "replace"
                "decode_responses": False,
                "retry_on_timeout": False,
                "retry_on_error": [],
                "ssl": False,
                "ssl_keyfile": "",
                "ssl_certfile": "",
                "ssl_cert_reqs": "",
                "ssl_ca_certs": "",
                "ssl_ca_data": "",
                "ssl_check_hostname": False,
                "max_connections": 1,
                "single_connection_client": False,
                "health_check_interval": 1,
                "client_name": "",
                "lib_name": "",
                "lib_version": "",
                "auto_close_connection_pool": False,
                "protocol": 3,
                "retry": {},
            },
        },
    },
}

Nota

Valores de options são descritos em redis.asyncio.client.Redis.