Coverage for infrastructure/database/trade_redis_client.py: 0.00%

99 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-10-13 18:58 +0000

1""" 

2Trade模块的Redis客户端 

3""" 

4 

5import json 

6import os 

7from typing import Any, Optional 

8 

9import redis 

10from dotenv import load_dotenv 

11 

12# 加载项目根目录的环境变量 

13load_dotenv() 

14 

15 

16class TradeRedisClient: 

17 """交易模块Redis客户端""" 

18 

19 def __init__(self): 

20 """初始化Redis连接""" 

21 self.redis_host = os.getenv("REDIS_HOST", "localhost") 

22 self.redis_port = int(os.getenv("REDIS_PORT", 6379)) 

23 self.redis_db = int(os.getenv("REDIS_DB", 1)) # 使用数据库1 

24 self.redis_password = os.getenv("REDIS_PASSWORD", "") 

25 

26 try: 

27 if self.redis_password: 

28 self.client = redis.Redis( 

29 host=self.redis_host, 

30 port=self.redis_port, 

31 db=self.redis_db, 

32 password=self.redis_password, 

33 decode_responses=True, 

34 ) 

35 else: 

36 self.client = redis.Redis( 

37 host=self.redis_host, 

38 port=self.redis_port, 

39 db=self.redis_db, 

40 decode_responses=True, 

41 ) 

42 

43 # 测试连接 

44 self.client.ping() 

45 print( 

46 f"✅ Trade Redis连接成功: {self.redis_host}:{self.redis_port} (DB: {self.redis_db})" 

47 ) 

48 

49 except Exception as e: 

50 print(f"❌ Trade Redis连接失败: {e}") 

51 self.client = None 

52 

53 def is_connected(self) -> bool: 

54 """检查Redis连接状态""" 

55 if not self.client: 

56 return False 

57 try: 

58 self.client.ping() 

59 return True 

60 except: 

61 return False 

62 

63 def set_trading_data( 

64 self, key: str, data: Any, expire: Optional[int] = None 

65 ) -> bool: 

66 """设置交易数据""" 

67 if not self.is_connected(): 

68 return False 

69 

70 try: 

71 if isinstance(data, (dict, list)): 

72 data = json.dumps(data, ensure_ascii=False) 

73 

74 if expire: 

75 return self.client.setex(key, expire, data) 

76 else: 

77 return self.client.set(key, data) 

78 except Exception as e: 

79 print(f"Trade Redis SET错误: {e}") 

80 return False 

81 

82 def get_trading_data(self, key: str) -> Optional[Any]: 

83 """获取交易数据""" 

84 if not self.is_connected(): 

85 return None 

86 

87 try: 

88 value = self.client.get(key) 

89 if value is None: 

90 return None 

91 

92 try: 

93 return json.loads(value) 

94 except: 

95 return value 

96 except Exception as e: 

97 print(f"Trade Redis GET错误: {e}") 

98 return None 

99 

100 def set_market_data(self, symbol: str, data: dict, expire: int = 300) -> bool: 

101 """设置市场数据(5分钟过期)""" 

102 key = f"market:{symbol}" 

103 return self.set_trading_data(key, data, expire) 

104 

105 def get_market_data(self, symbol: str) -> Optional[dict]: 

106 """获取市场数据""" 

107 key = f"market:{symbol}" 

108 return self.get_trading_data(key) 

109 

110 def set_position(self, account_id: str, position_data: dict) -> bool: 

111 """设置持仓数据""" 

112 key = f"position:{account_id}" 

113 return self.set_trading_data(key, position_data) 

114 

115 def get_position(self, account_id: str) -> Optional[dict]: 

116 """获取持仓数据""" 

117 key = f"position:{account_id}" 

118 return self.get_trading_data(key) 

119 

120 def set_order(self, order_id: str, order_data: dict, expire: int = 3600) -> bool: 

121 """设置订单数据(1小时过期)""" 

122 key = f"order:{order_id}" 

123 return self.set_trading_data(key, order_data, expire) 

124 

125 def get_order(self, order_id: str) -> Optional[dict]: 

126 """获取订单数据""" 

127 key = f"order:{order_id}" 

128 return self.get_trading_data(key) 

129 

130 def delete_order(self, order_id: str) -> bool: 

131 """删除订单数据""" 

132 if not self.is_connected(): 

133 return False 

134 

135 try: 

136 key = f"order:{order_id}" 

137 return bool(self.client.delete(key)) 

138 except Exception as e: 

139 print(f"Trade Redis DELETE错误: {e}") 

140 return False 

141 

142 def get_all_orders(self) -> list: 

143 """获取所有订单""" 

144 if not self.is_connected(): 

145 return [] 

146 

147 try: 

148 keys = self.client.keys("order:*") 

149 orders = [] 

150 for key in keys: 

151 order_data = self.get_trading_data(key) 

152 if order_data: 

153 orders.append(order_data) 

154 return orders 

155 except Exception as e: 

156 print(f"Trade Redis GET ALL ORDERS错误: {e}") 

157 return [] 

158 

159 

160# 全局交易Redis客户端实例 

161trade_redis_client = TradeRedisClient() 

162 

163 

164def get_trade_redis() -> TradeRedisClient: 

165 """获取交易Redis客户端实例""" 

166 return trade_redis_client