@router.get("/config-setting/key/{key}", summary="通过Key获取单个配置")
async def getConfigSettingByKey(*,
db: Session = Depends(deps.get_db),
r: asyncRedis = Depends(deps.get_redis),
key: str
):
if r:
config_setting_obj = await curd_config_setting.getByKeyWithCache(r, db, key=key)
else:
config_setting_obj = curd_config_setting.getByKey(db, key=key)
return respSuccessJson(config_setting_obj)
这段代码是一个 Python FastAPI 的端点,它通过指定的 key 获取单个配置。它使用依赖注入来获取数据库会话和 asyncRedis 实例。如果 asyncRedis 实例可用,它将使用缓存版本来获取配置设置,否则将直接从数据库中获取。最后,它使用 respSuccessJson 函数将获取的配置设置作为 JSON 响应返回。
这段代码的意思是,根据指定的 key 从数据库或缓存中获取配置设置,并将结果以 JSON 格式返回作为成功的响应。
async def getByKeyWithCache(self, r: asyncRedis, db: Session, key: str) -> dict:
_key = self.CACHE_KEY + key
# if res := await r.get(_key): # python3.8+
res = await r.get(_key)
if res:
return json.loads(res)
res = self.getByKey(db, key)
await r.setex(_key, self.EXPIRE_TIME, json.dumps(res))
await r.setex(self.CACHE_ID_KEY + str(res['id']), self.EXPIRE_TIME, key)
return res
这段代码是一个方法,它用于从缓存中获取特定键的配置设置。首先,它会构建一个带有特定前缀的缓存键。然后,它尝试从缓存中获取该键对应的值。如果找到了缓存值,它会将其解析为 JSON 格式并返回。
如果没有找到缓存值,它会调用类中的 getByKey 方法从数据库中获取配置设置。接着,它会将这个获取到的配置设置以 JSON 格式存入缓存,并设置过期时间。最后,它还会将配置设置的 ID 作为键,将键的值设置为原始的 key,并同样设置过期时间。
这段代码的意思是,它尝试从缓存中获取特定键的配置设置,如果找到则返回缓存值,如果没有找到则从数据库中获取,并将获取到的值存入缓存。
def getByKey(self, db: Session, key: str) -> dict:
obj = db.query(*self.query_columns).filter(self.model.key == key, self.model.is_deleted == 0,
self.model.status.in_((0,))).first()
return {} if not obj else {
'id': obj.id,
'key': obj.key,
'name': obj.name,
'value': int(obj.value) if obj.value.isdigit() else obj.value
}
这段代码定义了一个方法,用于从数据库中根据指定的键获取配置设置。它接受一个数据库会话和一个键作为参数,并返回一个包含配置设置信息的字典。
在方法内部,它使用给定的键在数据库中进行查询,筛选条件包括键值等于指定键、未被删除以及状态为 0 的记录。如果找到了匹配的记录,它会将记录的相关信息提取出来,包括 id、key、name 以及 value。在提取 value 时,它会尝试将其转换为整数类型,如果无法转换则保持原始类型。
如果没有找到匹配的记录,它会返回一个空字典。
这段代码的意思是,根据指定的键从数据库中获取配置设置的相关信息,并将其以字典的形式返回。