feat: add local keydb

This commit is contained in:
2026-05-01 13:20:12 +03:00
parent 45f2949fbc
commit 3e181dc904
7 changed files with 5 additions and 71 deletions

View File

@@ -14,43 +14,4 @@ services:
APP_WORKERS: "1" APP_WORKERS: "1"
env_file: env_file:
- .env - .env
depends_on: restart: no
keydb:
condition: service_healthy
restart: no
keydb:
image: eqalpha/keydb
container_name: keydb
restart: no
expose:
- "6379"
volumes:
- keydb_data:/data
command:
- keydb-server
- --requirepass
- ${KEYDB_PASSWORD}
- --dir
- /data
- --appendonly
- "yes"
- --appendfsync
- everysec
- --save
- "900"
- "1"
- --save
- "300"
- "10"
- --save
- "60"
- "10000"
healthcheck:
test: ["CMD", "redis-cli", "-a", "${KEYDB_PASSWORD}", "ping"]
interval: 5s
timeout: 2s
retries: 20
volumes:
keydb_data:

View File

@@ -3,7 +3,7 @@ from datetime import datetime, timezone
from decimal import Decimal, ROUND_UP from decimal import Decimal, ROUND_UP
from ulid import ULID from ulid import ULID
from src.application.abstractions import IUnitOfWork from src.application.abstractions import IUnitOfWork
from src.application.contracts import ICache, ILogger from src.application.contracts import ICache,ILogger
from src.application.contracts import IItPayService from src.application.contracts import IItPayService
from src.application.domain.entities.order import OrderEntity from src.application.domain.entities.order import OrderEntity
from src.application.domain.enums import OrderStatus from src.application.domain.enums import OrderStatus
@@ -19,13 +19,11 @@ class CreateOrderCommand:
*, *,
unit_of_work: IUnitOfWork, unit_of_work: IUnitOfWork,
logger: ILogger, logger: ILogger,
cache_local: ICache,
remote_cache: ICache, remote_cache: ICache,
itpay_service: IItPayService, itpay_service: IItPayService,
) -> None: ) -> None:
self._unit_of_work = unit_of_work self._unit_of_work = unit_of_work
self._logger = logger self._logger = logger
self._cache_local = cache_local
self._remote_cache = remote_cache self._remote_cache = remote_cache
self._itpay_service = itpay_service self._itpay_service = itpay_service

View File

@@ -74,11 +74,6 @@ class Settings(BaseSettings):
REDIS_PASSWORD: str | None = None REDIS_PASSWORD: str | None = None
REDIS_DB: int = 0 REDIS_DB: int = 0
KEYDB_LOCAL_HOST: str | None = None
KEYDB_LOCAL_PORT: int | None = None
KEYDB_LOCAL_PASSWORD: str | None = None
KEYDB_LOCAL_DB: int | None = None
KEYDB_REMOTE_HOST: str | None = None KEYDB_REMOTE_HOST: str | None = None
KEYDB_REMOTE_PORT: int | None = None KEYDB_REMOTE_PORT: int | None = None
KEYDB_REMOTE_PASSWORD: str | None = None KEYDB_REMOTE_PASSWORD: str | None = None
@@ -293,14 +288,6 @@ class Settings(BaseSettings):
auth = f':{password}@' if password else '' auth = f':{password}@' if password else ''
return f'redis://{auth}{host}:{port}/{db}' return f'redis://{auth}{host}:{port}/{db}'
@property
def KEYDB_LOCAL_URL(self) -> str:
host = self.KEYDB_LOCAL_HOST or self.REDIS_HOST
port = int(self.KEYDB_LOCAL_PORT) if self.KEYDB_LOCAL_PORT is not None else int(self.REDIS_PORT)
password = self.KEYDB_LOCAL_PASSWORD if self.KEYDB_LOCAL_PASSWORD is not None else self.REDIS_PASSWORD
db = int(self.KEYDB_LOCAL_DB) if self.KEYDB_LOCAL_DB is not None else int(self.REDIS_DB)
return self._redis_url(host=host, port=port, password=password, db=db)
@property @property
def KEYDB_REMOTE_URL(self) -> str: def KEYDB_REMOTE_URL(self) -> str:
host = self.KEYDB_REMOTE_HOST or self.REDIS_HOST host = self.KEYDB_REMOTE_HOST or self.REDIS_HOST

View File

@@ -40,7 +40,6 @@ async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
logger.set_instance_id(instance_id) logger.set_instance_id(instance_id)
logger.info(f'Users service instance started with id {instance_id}') logger.info(f'Users service instance started with id {instance_id}')
app.state.redis_local = create_redis_client(settings.KEYDB_LOCAL_URL)
app.state.redis_remote = create_redis_client(settings.KEYDB_REMOTE_URL) app.state.redis_remote = create_redis_client(settings.KEYDB_REMOTE_URL)
app.state.redis = app.state.redis_remote app.state.redis = app.state.redis_remote
@@ -61,7 +60,6 @@ async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
app.state.jwt_key_store = jwt_store app.state.jwt_key_store = jwt_store
app.state.jwt_keys_scheduler = jwt_scheduler app.state.jwt_keys_scheduler = jwt_scheduler
yield yield
await app.state.redis_local.aclose()
await app.state.redis_remote.aclose() await app.state.redis_remote.aclose()
logger.info(f'Users service instance ended with id {instance_id}') logger.info(f'Users service instance ended with id {instance_id}')

View File

@@ -1,9 +1,9 @@
from __future__ import annotations from __future__ import annotations
from src.presentation.dependencies.cache import get_cache,get_cache_local,get_cache_remote,get_redis,get_redis_local,get_redis_remote from src.presentation.dependencies.cache import get_cache,get_cache_remote,get_redis,get_redis_remote
from src.presentation.dependencies.queue_messanger import get_rabbit from src.presentation.dependencies.queue_messanger import get_rabbit
from src.presentation.dependencies.security import get_jwt_service from src.presentation.dependencies.security import get_jwt_service
__all__=['get_jwt_service','get_redis','get_redis_local','get_redis_remote','get_cache','get_cache_local','get_cache_remote','get_rabbit'] __all__=['get_jwt_service','get_redis','get_redis_remote','get_cache','get_cache_remote','get_rabbit']

View File

@@ -8,10 +8,6 @@ from src.application.contracts import ICache
from src.infrastructure.cache import KeydbCache,RemoteCache from src.infrastructure.cache import KeydbCache,RemoteCache
def get_redis_local(request: Request) -> Redis:
return request.app.state.redis_local
def get_redis_remote(request: Request) -> Redis: def get_redis_remote(request: Request) -> Redis:
return request.app.state.redis_remote return request.app.state.redis_remote
@@ -20,10 +16,6 @@ def get_redis(request: Request) -> Redis:
return request.app.state.redis_remote return request.app.state.redis_remote
def get_cache_local(redis_client: Redis = Depends(get_redis_local)) -> ICache:
return KeydbCache(redis_client)
def get_cache_remote(redis_client: Redis = Depends(get_redis_remote)) -> ICache: def get_cache_remote(redis_client: Redis = Depends(get_redis_remote)) -> ICache:
return KeydbCache(redis_client) return KeydbCache(redis_client)

View File

@@ -6,7 +6,7 @@ from src.application.contracts import ICache,ILogger,IQueueMessanger
from src.application.contracts.i_itpay_service import IItPayService from src.application.contracts.i_itpay_service import IItPayService
from src.infrastructure.config import settings from src.infrastructure.config import settings
from src.infrastructure.itpay.client import ItPayClient from src.infrastructure.itpay.client import ItPayClient
from src.presentation.dependencies.cache import get_cache_local,get_remote_cache from src.presentation.dependencies.cache import get_remote_cache
from src.presentation.dependencies.logger import get_logger from src.presentation.dependencies.logger import get_logger
from src.presentation.dependencies.queue_messanger import get_rabbit from src.presentation.dependencies.queue_messanger import get_rabbit
from src.presentation.dependencies.unit_of_work import get_unit_of_work from src.presentation.dependencies.unit_of_work import get_unit_of_work
@@ -22,14 +22,12 @@ def get_itpay_service() -> IItPayService:
def get_create_order_command( def get_create_order_command(
logger: ILogger = Depends(get_logger), logger: ILogger = Depends(get_logger),
unit_of_work: IUnitOfWork = Depends(get_unit_of_work), unit_of_work: IUnitOfWork = Depends(get_unit_of_work),
cache_local: ICache = Depends(get_cache_local),
remote_cache: ICache = Depends(get_remote_cache), remote_cache: ICache = Depends(get_remote_cache),
itpay_service: IItPayService = Depends(get_itpay_service), itpay_service: IItPayService = Depends(get_itpay_service),
) -> CreateOrderCommand: ) -> CreateOrderCommand:
return CreateOrderCommand( return CreateOrderCommand(
unit_of_work=unit_of_work, unit_of_work=unit_of_work,
logger=logger, logger=logger,
cache_local=cache_local,
remote_cache=remote_cache, remote_cache=remote_cache,
itpay_service=itpay_service, itpay_service=itpay_service,
) )