mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-22 23:23:55 +08:00
63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
"""
|
|
缓存配置管理
|
|
"""
|
|
|
|
from enum import Enum
|
|
from typing import Dict, Any, Optional
|
|
from dataclasses import dataclass
|
|
from .strategies import CacheStrategy
|
|
|
|
|
|
class CacheType(Enum):
|
|
"""缓存类型枚举"""
|
|
|
|
LOCATION = "location"
|
|
WEATHER = "weather"
|
|
LUNAR = "lunar"
|
|
INTENT = "intent"
|
|
IP_INFO = "ip_info"
|
|
CONFIG = "config"
|
|
DEVICE_PROMPT = "device_prompt"
|
|
VOICEPRINT_HEALTH = "voiceprint_health" # 声纹识别健康检查
|
|
|
|
|
|
@dataclass
|
|
class CacheConfig:
|
|
"""缓存配置类"""
|
|
|
|
strategy: CacheStrategy = CacheStrategy.TTL
|
|
ttl: Optional[float] = 300 # 默认5分钟
|
|
max_size: Optional[int] = 1000 # 默认最大1000条
|
|
cleanup_interval: float = 60 # 清理间隔(秒)
|
|
|
|
@classmethod
|
|
def for_type(cls, cache_type: CacheType) -> "CacheConfig":
|
|
"""根据缓存类型返回预设配置"""
|
|
configs = {
|
|
CacheType.LOCATION: cls(
|
|
strategy=CacheStrategy.TTL, ttl=None, max_size=1000 # 手动失效
|
|
),
|
|
CacheType.IP_INFO: cls(
|
|
strategy=CacheStrategy.TTL, ttl=86400, max_size=1000 # 24小时
|
|
),
|
|
CacheType.WEATHER: cls(
|
|
strategy=CacheStrategy.TTL, ttl=28800, max_size=1000 # 8小时
|
|
),
|
|
CacheType.LUNAR: cls(
|
|
strategy=CacheStrategy.TTL, ttl=2592000, max_size=365 # 30天过期
|
|
),
|
|
CacheType.INTENT: cls(
|
|
strategy=CacheStrategy.TTL_LRU, ttl=600, max_size=1000 # 10分钟
|
|
),
|
|
CacheType.CONFIG: cls(
|
|
strategy=CacheStrategy.FIXED_SIZE, ttl=None, max_size=20 # 手动失效
|
|
),
|
|
CacheType.DEVICE_PROMPT: cls(
|
|
strategy=CacheStrategy.TTL, ttl=None, max_size=1000 # 手动失效
|
|
),
|
|
CacheType.VOICEPRINT_HEALTH: cls(
|
|
strategy=CacheStrategy.TTL, ttl=600, max_size=100 # 10分钟过期
|
|
),
|
|
}
|
|
return configs.get(cache_type, cls())
|