service.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. from redis.asyncio.client import Redis
  2. from app.common.enums import RedisInitKeyConfig
  3. from app.core.redis_crud import RedisCURD
  4. from .schema import CacheInfoSchema, CacheMonitorSchema
  5. class CacheService:
  6. """
  7. 缓存监控模块服务层
  8. """
  9. @classmethod
  10. async def get_cache_monitor_statistical_info_service(cls, redis: Redis) -> dict:
  11. """
  12. 获取缓存监控信息。
  13. 参数:
  14. - redis (Redis): Redis 对象。
  15. 返回:
  16. - dict: 缓存监控信息字典。
  17. """
  18. info = await RedisCURD(redis).info()
  19. db_size = await RedisCURD(redis).db_size()
  20. command_stats_dict = await RedisCURD(redis).commandstats()
  21. command_stats = [
  22. {"name": key.split("_")[1], "value": str(value.get("calls"))}
  23. for key, value in command_stats_dict.items()
  24. ]
  25. result = CacheMonitorSchema(command_stats=command_stats, db_size=db_size, info=info)
  26. return result.model_dump()
  27. @classmethod
  28. async def get_cache_monitor_cache_name_service(cls) -> list:
  29. """
  30. 获取缓存名称列表信息。
  31. 返回:
  32. - list: 缓存名称列表信息。
  33. """
  34. name_list = [
  35. CacheInfoSchema(
  36. cache_key="",
  37. cache_name=key_config.key,
  38. cache_value="",
  39. remark=key_config.remark,
  40. ).model_dump()
  41. for key_config in RedisInitKeyConfig
  42. ]
  43. return name_list
  44. @classmethod
  45. async def get_cache_monitor_cache_key_service(cls, redis: Redis, cache_name: str) -> list:
  46. """
  47. 获取缓存键名列表信息。
  48. 参数:
  49. - redis (Redis): Redis 对象。
  50. - cache_name (str): 缓存名称。
  51. 返回:
  52. - list: 缓存键名列表信息。
  53. """
  54. cache_keys = await RedisCURD(redis).get_keys(f"{cache_name}*")
  55. cache_key_list = [
  56. key.split(":", 1)[1] for key in cache_keys if key.startswith(f"{cache_name}:")
  57. ]
  58. return cache_key_list
  59. @classmethod
  60. async def get_cache_monitor_cache_value_service(
  61. cls, redis: Redis, cache_name: str, cache_key: str
  62. ) -> dict:
  63. """
  64. 获取缓存内容信息。
  65. 参数:
  66. - redis (Redis): Redis 对象。
  67. - cache_name (str): 缓存名称。
  68. - cache_key (str): 缓存键名。
  69. 返回:
  70. - dict: 缓存内容信息字典。
  71. """
  72. cache_value = await RedisCURD(redis).get(f"{cache_name}:{cache_key}")
  73. return CacheInfoSchema(
  74. cache_key=cache_key,
  75. cache_name=cache_name,
  76. cache_value=cache_value,
  77. remark="",
  78. ).model_dump()
  79. @classmethod
  80. async def clear_cache_monitor_cache_name_service(cls, redis: Redis, cache_name: str) -> bool:
  81. """
  82. 清除指定缓存名称对应的所有键值。
  83. 参数:
  84. - redis (Redis): Redis 对象。
  85. - cache_name (str): 缓存名称。
  86. 返回:
  87. - bool: 是否清理成功。
  88. """
  89. cache_keys = await RedisCURD(redis).get_keys(f"{cache_name}*")
  90. if cache_keys:
  91. await RedisCURD(redis).delete(*cache_keys)
  92. return True
  93. @classmethod
  94. async def clear_cache_monitor_cache_key_service(cls, redis: Redis, cache_key: str) -> bool:
  95. """
  96. 清除匹配指定键名的所有键值。
  97. 参数:
  98. - redis (Redis): Redis 对象。
  99. - cache_key (str): 缓存键名。
  100. 返回:
  101. - bool: 是否清理成功。
  102. """
  103. cache_keys = await RedisCURD(redis).get_keys(f"*{cache_key}")
  104. if cache_keys:
  105. await RedisCURD(redis).delete(*cache_keys)
  106. return True
  107. @classmethod
  108. async def clear_cache_monitor_all_service(cls, redis: Redis) -> bool:
  109. """
  110. 清除所有缓存。
  111. 参数:
  112. - redis (Redis): Redis 对象。
  113. 返回:
  114. - bool: 是否清理成功。
  115. """
  116. cache_keys = await RedisCURD(redis).get_keys()
  117. if cache_keys:
  118. await RedisCURD(redis).delete(*cache_keys)
  119. return True
  120. # 避免清除所有的缓存,而采用上面的方式,只清除本系统内指定的所有缓存
  121. # return await RedisCURD(redis).clear()