service.py 4.3 KB

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