Files
dcalc/backend/api/core/Redis.py
T
2026-06-02 20:56:07 +08:00

51 lines
1.6 KiB
Python

import inspect
import json
from api.core.Gzip import gzip_zip, gzip_unzip
from config.main import config
async def get_redis_info_async(redis, key, fun, expire = 0, without_gzip=False):
info = None
if not config.DEBUG_MODE and redis:
try:
if without_gzip:
info = json.loads(redis.get(key))
else:
info = json.loads(gzip_unzip(redis.get(key)))
except Exception:
info = None
if info is None:
if inspect.iscoroutinefunction(fun):
info = await fun()
else:
info = fun()
if not config.DEBUG_MODE and redis and info is not None:
if without_gzip:
redis.set(key, json.dumps(info))
else:
redis.set(key, gzip_zip(json.dumps(info)))
if expire > 0:
redis.expire(key, expire)
return info
def get_redis_info(redis, key, fun, expire = 0, without_gzip=False):
info = None
if not config.DEBUG_MODE and redis:
try:
if without_gzip:
info = json.loads(redis.get(key))
else:
info = json.loads(gzip_unzip(redis.get(key)))
except Exception:
info = None
if info is None:
info = fun()
if not config.DEBUG_MODE and redis and info is not None:
if without_gzip:
redis.set(key, json.dumps(info))
else:
redis.set(key, gzip_zip(json.dumps(info)))
if expire > 0:
redis.expire(key, expire)
return info