mm_mongodb 1.4.8 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mm_mongodb",
3
- "version": "1.4.8",
3
+ "version": "1.5.0",
4
4
  "description": "MongoDB数据库操作模块,提供简洁易用的API、缓存功能以及完整的Redis兼容接口,支持事件系统、事务和连接池管理",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -36,7 +36,7 @@
36
36
  },
37
37
  "homepage": "https://gitee.com/qiuwenwu91/mm_mongodb#readme",
38
38
  "dependencies": {
39
- "mm_logs": "^1.5.2",
39
+ "mm_base_service": "^1.0.0",
40
40
  "mongodb": "^6.20.0"
41
41
  }
42
42
  }
package/test.js CHANGED
@@ -1,64 +1,297 @@
1
- const MongoDB = require('./index.js').MongoDB;
2
- const mongodb_admin = require('./index.js').mongodb_admin;
3
-
4
- async function test2() {
5
- var mb = mongodb_admin("sys");
6
- mb.setConfig();
7
- // mb.open();
8
- console.log(mb);
9
- }
10
- test2();
11
-
12
- /* 调用示例 */
13
- async function test() {
14
- console.log("测试开始");
15
- // 实例化构造函数,使用正确的参数
16
- var mb = new MongoDB("default");
17
- mb.setConfig();
18
-
19
- await mb.open();
20
- try {
21
- // 创建数据表
22
- await mb.addTable('bs_table');
23
- console.log("创建表bs_table");
24
- } catch (e) {
25
- console.log("创建表错误提示:", e);
26
- //TODO handle the exception
27
- }
28
- mb.table = "mm_table";
29
-
30
- // 使用正确的find方法代替不存在的get方法
31
- var ret = await mb.find({
32
- 'name': '李四'
33
- });
34
- console.log("查询李四",ret);
35
-
36
- ret = await mb.find({
37
- 'name': '张三'
38
- });
39
- console.log("查询张三",ret);
40
-
41
- // 添加一条数据
42
- ret = await mb.addObj({
43
- name: "张三",
44
- age: 21,
45
- sex: true
46
- });
47
- console.log("添加一条数据", ret);
48
-
49
- // 添加多条数据
50
- ret = await mb.addList([{
51
- name: "李四",
52
- age: 18,
53
- sex: false
54
- }, {
55
- name: "王五",
56
- age: 15,
57
- sex: true
58
- }]);
59
-
60
- console.log("添加多条数据", ret);
61
- console.log("测试完成");
62
- }
63
-
64
- test();
1
+ const MongoDB = require('./index.js').MongoDB;
2
+ const mongodb_admin = require('./index.js').mongodb_admin;
3
+
4
+ async function test() {
5
+ try {
6
+ var bl, num, arr = [];
7
+ // 使用默认配置
8
+ var config = {
9
+ host: 'localhost',
10
+ port: 27017,
11
+ user: '',
12
+ password: '',
13
+ database: 'test_cache',
14
+ options: {}
15
+ };
16
+ var rs = mongodb_admin('sys', config);
17
+ await rs.open();
18
+ await rs.addTable('cache_test');
19
+
20
+ // 清理之前的测试数据
21
+ await rs.delete({
22
+ key: {
23
+ $in: [
24
+ "test_key", "test_obj", "temp_key", "counter", "float_counter",
25
+ "test_str", "hash_key", "set_key", "zset_key", "sort_key"
26
+ ]
27
+ }
28
+ });
29
+
30
+ $.log.debug('[MongoDB] ==============================');
31
+ $.log.debug('[MongoDB] 开始兼容性测试 - 核心缓存方法');
32
+ $.log.debug('[MongoDB] ==============================');
33
+
34
+ // 测试1: set和get操作
35
+ $.log.debug('[MongoDB] \n测试1: 设置和获取对象');
36
+ await rs.set("test_obj", {
37
+ name: "李四",
38
+ age: 18
39
+ });
40
+ var user = await rs.get("test_obj");
41
+ $.log.debug('[MongoDB] 测试输出', user);
42
+
43
+ // 测试2: 设置和获取基本值
44
+ $.log.debug('[MongoDB] \n测试2: 设置和获取基本值');
45
+ bl = await rs.set("test_key", "test_value");
46
+ $.log.debug('[MongoDB] set结果(true):', bl);
47
+
48
+ var value = await rs.get("test_key");
49
+ $.log.debug('[MongoDB] get结果(test_value):', value);
50
+
51
+ // 测试3: 数值增加相关 (addInt, incr, decr)
52
+ $.log.debug('[MongoDB] \n测试3: 数值增加相关');
53
+ await rs.set("counter", 10);
54
+ var newCount = await rs.addInt("counter", 5);
55
+ $.log.debug('[MongoDB] addInt增加后的值(15):', newCount);
56
+
57
+ newCount = await rs.incr("counter");
58
+ $.log.debug('[MongoDB] incr增加后的值(16):', newCount);
59
+
60
+ newCount = await rs.decr("counter");
61
+ $.log.debug('[MongoDB] decr减少后的值(15):', newCount);
62
+
63
+ // 测试4: 浮点数增加 (addFloat)
64
+ $.log.debug('[MongoDB] \n测试4: 浮点数增加');
65
+ await rs.set("float_counter", 10.5);
66
+ var newFloat = await rs.addFloat("float_counter", 2.3);
67
+ $.log.debug('[MongoDB] addFloat增加后的值(12.8):', newFloat);
68
+
69
+ // 测试5: 字符串操作 (addStr)
70
+ $.log.debug('[MongoDB] \n测试5: 字符串操作');
71
+ await rs.set("test_str", "Hello");
72
+ var strLen = await rs.addStr("test_str", " World");
73
+ $.log.debug('[MongoDB] addStr追加后长度(11):', strLen);
74
+ var fullStr = await rs.get("test_str");
75
+ $.log.debug('[MongoDB] 完整字符串(Hello World):', fullStr);
76
+
77
+ // 测试6: 条件设置 (add - 仅当键不存在时设置)
78
+ $.log.debug('[MongoDB] \n测试6: 条件设置');
79
+ await rs.set("exists_key", "已存在的值");
80
+ var addResult1 = await rs.add("exists_key", "这不会被设置");
81
+ var addResult2 = await rs.add("new_key", "新键值");
82
+ $.log.debug('[MongoDB] 已有键add结果(false):', addResult1);
83
+ $.log.debug('[MongoDB] 新键add结果(true):', addResult2);
84
+ $.log.debug('[MongoDB] 新键值:', await rs.get("new_key"));
85
+
86
+ // 测试7: 键检查 (has, exists)
87
+ $.log.debug('[MongoDB] \n测试7: 键检查');
88
+ var hasResult = await rs.has("new_key");
89
+ var existsResult = await rs.exists("new_key");
90
+ $.log.debug('[MongoDB] has检查结果(true):', hasResult);
91
+ $.log.debug('[MongoDB] exists检查结果(1):', existsResult);
92
+
93
+ // 测试8: 批量操作 (mset, mget)
94
+ $.log.debug('[MongoDB] \n测试8: 批量操作');
95
+ bl = await rs.mset({
96
+ "batch1": "值1",
97
+ "batch2": "值2",
98
+ "batch3": {name: "测试对象"}
99
+ });
100
+ $.log.debug('[MongoDB] mset结果(OK):', bl);
101
+
102
+ var batchResult = await rs.mget(["batch1", "batch2", "batch3"]);
103
+ $.log.debug('[MongoDB] 批量获取结果:', batchResult);
104
+
105
+ // 测试9: 删除操作 (del)
106
+ $.log.debug('[MongoDB] \n测试9: 删除操作');
107
+ var delResult = await rs.del("batch1");
108
+ $.log.debug('[MongoDB] 单键删除结果(true):', delResult);
109
+ var delMultiResult = await rs.del(["batch2", "batch3"]);
110
+ $.log.debug('[MongoDB] 多键删除结果(true):', delMultiResult);
111
+
112
+ $.log.debug('[MongoDB] ==============================');
113
+ $.log.debug('[MongoDB] 开始兼容性测试 - 哈希表操作');
114
+ $.log.debug('[MongoDB] ==============================');
115
+
116
+ // 测试10: 哈希表基本操作 (hset, hget)
117
+ $.log.debug('[MongoDB] \n测试10: 哈希表基本操作');
118
+ var hset1 = await rs.hset("hash_key", "field1", "value1");
119
+ var hset2 = await rs.hset("hash_key", "field2", {name: "测试对象"});
120
+ $.log.debug('[MongoDB] hset创建新字段结果(1):', hset1);
121
+ $.log.debug('[MongoDB] hset创建新字段结果(1):', hset2);
122
+
123
+ var hget1 = await rs.hget("hash_key", "field1");
124
+ var hget2 = await rs.hget("hash_key", "field2");
125
+ $.log.debug('[MongoDB] hget field1结果(value1):', hget1);
126
+ $.log.debug('[MongoDB] hget field2结果:', hget2);
127
+
128
+ // 测试11: 更新哈希字段
129
+ $.log.debug('[MongoDB] \n测试11: 更新哈希字段');
130
+ var hsetUpdate = await rs.hset("hash_key", "field1", "updated_value");
131
+ $.log.debug('[MongoDB] hset更新字段结果(0):', hsetUpdate);
132
+ $.log.debug('[MongoDB] 更新后hget field1:', await rs.hget("hash_key", "field1"));
133
+
134
+ // 测试12: 获取所有哈希字段 (hgetall, hkeys, hvals, hlen)
135
+ $.log.debug('[MongoDB] \n测试12: 获取所有哈希字段');
136
+ var hgetall = await rs.hgetall("hash_key");
137
+ $.log.debug('[MongoDB] hgetall结果:', hgetall);
138
+
139
+ var hkeys = await rs.hkeys("hash_key");
140
+ $.log.debug('[MongoDB] hkeys结果:', hkeys);
141
+
142
+ var hvals = await rs.hvals("hash_key");
143
+ $.log.debug('[MongoDB] hvals结果:', hvals);
144
+
145
+ var hlen = await rs.hlen("hash_key");
146
+ $.log.debug('[MongoDB] hlen结果(2):', hlen);
147
+
148
+ // 测试13: 哈希字段检查和删除 (hexists, hdel)
149
+ $.log.debug('[MongoDB] \n测试13: 哈希字段检查和删除');
150
+ var hexists1 = await rs.hexists("hash_key", "field1");
151
+ var hexists2 = await rs.hexists("hash_key", "non_existent");
152
+ $.log.debug('[MongoDB] hexists存在字段结果(true):', hexists1);
153
+ $.log.debug('[MongoDB] hexists不存在字段结果(false):', hexists2);
154
+
155
+ var hdel = await rs.hdel("hash_key", "field1");
156
+ $.log.debug('[MongoDB] hdel结果(true):', hdel);
157
+ $.log.debug('[MongoDB] 删除后hget field1:', await rs.hget("hash_key", "field1"));
158
+
159
+ $.log.debug('[MongoDB] ==============================');
160
+ $.log.debug('[MongoDB] 开始兼容性测试 - 集合操作');
161
+ $.log.debug('[MongoDB] ==============================');
162
+
163
+ // 测试14: 集合基本操作 (saddMulti, sremMulti)
164
+ $.log.debug('[MongoDB] \n测试14: 集合基本操作');
165
+ var sadd = await rs.saddMulti("set_key", ["member1", "member2", "member3"]);
166
+ $.log.debug('[MongoDB] saddMulti结果(3):', sadd);
167
+
168
+ var srem = await rs.sremMulti("set_key", ["member2"]);
169
+ $.log.debug('[MongoDB] sremMulti结果(1):', srem);
170
+
171
+ // 测试15: 集合成员检查 (sismember)
172
+ $.log.debug('[MongoDB] \n测试15: 集合成员检查');
173
+ var sismember1 = await rs.sismember("set_key", "member1");
174
+ var sismember2 = await rs.sismember("set_key", "member2");
175
+ $.log.debug('[MongoDB] sismember存在成员结果(true):', sismember1);
176
+ $.log.debug('[MongoDB] sismember不存在成员结果(false):', sismember2);
177
+
178
+ // 测试16: 获取集合成员 (smembers, scard)
179
+ $.log.debug('[MongoDB] \n测试16: 获取集合成员');
180
+ var smembers = await rs.smembers("set_key");
181
+ var scard = await rs.scard("set_key");
182
+ $.log.debug('[MongoDB] smembers结果:', smembers);
183
+ $.log.debug('[MongoDB] scard结果(2):', scard);
184
+
185
+ // 测试17: 集合操作 (sinter, sunion, sdiff)
186
+ $.log.debug('[MongoDB] \n测试17: 集合操作');
187
+ await rs.saddMulti("set_key2", ["member2", "member3", "member4"]);
188
+ var sinter = await rs.sinter(["set_key", "set_key2"]);
189
+ var sunion = await rs.sunion(["set_key", "set_key2"]);
190
+ var sdiff = await rs.sdiff(["set_key", "set_key2"]);
191
+ $.log.debug('[MongoDB] sinter交集结果:', sinter);
192
+ $.log.debug('[MongoDB] sunion并集结果:', sunion);
193
+ $.log.debug('[MongoDB] sdiff差集结果:', sdiff);
194
+
195
+ $.log.debug('[MongoDB] ==============================');
196
+ $.log.debug('[MongoDB] 开始兼容性测试 - 有序集合操作');
197
+ $.log.debug('[MongoDB] ==============================');
198
+
199
+ // 测试18: 有序集合基本操作 (zadd, zrem)
200
+ $.log.debug('[MongoDB] \n测试18: 有序集合基本操作');
201
+ var zadd1 = await rs.zadd("zset_key", 10, "zmember1");
202
+ var zadd2 = await rs.zadd("zset_key", 5, "zmember2");
203
+ $.log.debug('[MongoDB] zadd结果(true):', zadd1);
204
+ $.log.debug('[MongoDB] zadd结果(true):', zadd2);
205
+
206
+ var zrem = await rs.zrem("zset_key", "zmember2");
207
+ $.log.debug('[MongoDB] zrem删除结果(1):', zrem);
208
+
209
+ // 测试19: 获取有序集合成员 (zrangebyscore)
210
+ $.log.debug('[MongoDB] \n测试19: 获取有序集合成员');
211
+ var zrangebyscore = await rs.zrangebyscore("zset_key", 0, 20);
212
+ $.log.debug('[MongoDB] zrangebyscore结果:', zrangebyscore);
213
+
214
+ // 测试20: 有序集合分数操作 (zscore)
215
+ $.log.debug('[MongoDB] \n测试20: 有序集合分数操作');
216
+ var zscore = await rs.zscore("zset_key", "zmember1");
217
+ $.log.debug('[MongoDB] zscore结果(10):', zscore);
218
+
219
+ // 测试21: 有序集合成员数量 (zcard)
220
+ $.log.debug('[MongoDB] \n测试21: 有序集合成员数量');
221
+ var zcard = await rs.zcard("zset_key");
222
+ $.log.debug('[MongoDB] zcard结果(1):', zcard);
223
+
224
+ $.log.debug('[MongoDB] ==============================');
225
+ $.log.debug('[MongoDB] 开始兼容性测试 - 列表操作');
226
+ $.log.debug('[MongoDB] ==============================');
227
+
228
+ // 测试22: 列表基本操作 (lpush, rpush)
229
+ $.log.debug('[MongoDB] \n测试22: 列表基本操作');
230
+ var lpush = await rs.lpush("list_key", "item0");
231
+ var rpush1 = await rs.rpush("list_key", "item1");
232
+ var rpush2 = await rs.rpush("list_key", "item2");
233
+ $.log.debug('[MongoDB] lpush结果(1):', lpush);
234
+ $.log.debug('[MongoDB] rpush结果(2):', rpush1);
235
+ $.log.debug('[MongoDB] rpush结果(3):', rpush2);
236
+
237
+ // 测试23: 列表长度 (llen)
238
+ $.log.debug('[MongoDB] \n测试23: 列表长度');
239
+ var llen = await rs.llen("list_key");
240
+ $.log.debug('[MongoDB] llen结果(3):', llen);
241
+
242
+ // 测试24: 列表范围 (lrange)
243
+ $.log.debug('[MongoDB] \n测试24: 列表范围');
244
+ var lrange = await rs.lrange("list_key", 0, -1);
245
+ $.log.debug('[MongoDB] lrange结果:', lrange);
246
+
247
+ // 测试25: 列表索引 (lindex)
248
+ $.log.debug('[MongoDB] \n测试25: 列表索引');
249
+ var lindex = await rs.lindex("list_key", 1);
250
+ $.log.debug('[MongoDB] lindex结果(item1):', lindex);
251
+
252
+ // 测试26: 列表弹出 (lpop, rpop)
253
+ $.log.debug('[MongoDB] \n测试26: 列表弹出');
254
+ var lpop = await rs.lpop("list_key");
255
+ var rpop = await rs.rpop("list_key");
256
+ $.log.debug('[MongoDB] lpop结果(item0):', lpop);
257
+ $.log.debug('[MongoDB] rpop结果(item2):', rpop);
258
+
259
+ // 清理所有测试数据
260
+ $.log.debug('[MongoDB] \n清理所有测试数据...');
261
+ await rs.delete({
262
+ key: {
263
+ $in: [
264
+ "test_obj", "test_key", "temp_key", "counter", "float_counter", "test_str",
265
+ "exists_key", "new_key", "hash_key", "set_key", "set_key2", "zset_key",
266
+ "list_key"
267
+ ]
268
+ }
269
+ });
270
+
271
+ // 关闭连接
272
+ $.log.debug('[MongoDB] \n关闭连接...');
273
+ bl = await rs.close();
274
+ $.log.debug('[MongoDB] 关闭连接结果:', bl);
275
+
276
+ $.log.debug('[MongoDB] \n==============================');
277
+ $.log.debug('[MongoDB] 所有兼容性测试完成!');
278
+ $.log.debug('[MongoDB] ==============================');
279
+ } catch (error) {
280
+ $.log.error('[MongoDB] 测试过程中出现错误:', error);
281
+ }
282
+ }
283
+
284
+ test().then(() => {
285
+ // 测试成功完成
286
+ $.log.debug('[MongoDB] 测试脚本正常退出');
287
+ process.exit(0);
288
+ }).catch(err => {
289
+ $.log.error('[MongoDB] 未捕获的错误:', err);
290
+ process.exit(1);
291
+ });
292
+
293
+ // 添加超时保护,但让Promise处理正常结束
294
+ setTimeout(() => {
295
+ $.log.warn('[MongoDB] 测试脚本超时');
296
+ process.exit(1);
297
+ }, 10000); // 10秒超时
package/test_events.js DELETED
@@ -1,139 +0,0 @@
1
- // 事件测试文件
2
- const { MongoDB, mongodb_admin } = require('./index');
3
-
4
- // 事件统计对象
5
- const eventStats = {
6
- set_before: 0,
7
- set_after: 0,
8
- set_error: 0,
9
- del_before: 0,
10
- del_after: 0,
11
- del_error: 0,
12
- add_before: 0,
13
- add_after: 0,
14
- add_error: 0
15
- };
16
-
17
- // 重置事件统计
18
- function resetEventStats() {
19
- Object.keys(eventStats).forEach(key => {
20
- eventStats[key] = 0;
21
- });
22
- }
23
-
24
- // 注册所有事件监听器
25
- function registerEventListeners(cache) {
26
- // 注册set相关事件
27
- cache.on('set_before', (data) => {
28
- eventStats.set_before++;
29
- console.log('触发 set_before 事件:', data);
30
- });
31
-
32
- cache.on('set_after', (data) => {
33
- eventStats.set_after++;
34
- console.log('触发 set_after 事件:', data);
35
- });
36
-
37
- cache.on('set_error', (data) => {
38
- eventStats.set_error++;
39
- console.log('触发 set_error 事件:', data);
40
- });
41
-
42
- // 注册del相关事件
43
- cache.on('del_before', (data) => {
44
- eventStats.del_before++;
45
- console.log('触发 del_before 事件:', data);
46
- });
47
-
48
- cache.on('del_after', (data) => {
49
- eventStats.del_after++;
50
- console.log('触发 del_after 事件:', data);
51
- });
52
-
53
- cache.on('del_error', (data) => {
54
- eventStats.del_error++;
55
- console.log('触发 del_error 事件:', data);
56
- });
57
-
58
- // 注册add相关事件
59
- cache.on('add_before', (data) => {
60
- eventStats.add_before++;
61
- console.log('触发 add_before 事件:', data);
62
- });
63
-
64
- cache.on('add_after', (data) => {
65
- eventStats.add_after++;
66
- console.log('触发 add_after 事件:', data);
67
- });
68
-
69
- cache.on('add_error', (data) => {
70
- eventStats.add_error++;
71
- console.log('触发 add_error 事件:', data);
72
- });
73
- }
74
-
75
- // 运行事件测试
76
- async function runEventTests() {
77
- try {
78
- // 获取Redis兼容缓存实例
79
- const cache = mongodb_admin('cache');
80
-
81
- // 注册事件监听器
82
- registerEventListeners(cache);
83
-
84
- console.log('\n--- 测试set方法事件 ---');
85
- await cache.set('event_test_key', 'test_value');
86
-
87
- console.log('\n--- 测试add方法事件 ---');
88
- await cache.add('event_test_key2', 'add_value');
89
-
90
- console.log('\n--- 测试del方法事件 ---');
91
- await cache.del('event_test_key');
92
-
93
- console.log('\n--- 测试add到已存在键的事件 ---');
94
- await cache.add('event_test_key2', 'should_not_replace');
95
- await cache.del('event_test_key2');
96
-
97
- // 显示事件统计
98
- console.log('\n=== 事件触发统计 ===');
99
- console.log(eventStats);
100
-
101
- // 计算事件触发率
102
- const setEventsTriggered = eventStats.set_before === 1 && eventStats.set_after === 1;
103
- const delEventsTriggered = eventStats.del_before === 2 && eventStats.del_after === 2;
104
- const addEventsTriggered = eventStats.add_before === 2 && eventStats.add_after === 2;
105
-
106
- console.log('\n=== 事件测试结果 ===');
107
- if (setEventsTriggered && delEventsTriggered && addEventsTriggered) {
108
- console.log('✅ 所有事件测试通过!');
109
- } else {
110
- console.log('❌ 部分事件测试失败');
111
- if (!setEventsTriggered) console.log(' - set事件');
112
- if (!delEventsTriggered) console.log(' - del事件');
113
- if (!addEventsTriggered) console.log(' - add事件');
114
- }
115
-
116
- // 显示事件触发率
117
- console.log('\n事件触发率统计:');
118
- console.log(`set方法事件触发率: ${setEventsTriggered ? '100%' : '失败'}`);
119
- console.log(`del方法事件触发率: ${delEventsTriggered ? '100%' : '失败'}`);
120
- console.log(`add方法事件触发率: ${addEventsTriggered ? '100%' : '失败'}`);
121
-
122
- // 清理连接
123
- await cache.close();
124
-
125
- if (setEventsTriggered && delEventsTriggered && addEventsTriggered) {
126
- console.log('\n🎉 所有事件测试全部通过!');
127
- process.exit(0);
128
- } else {
129
- process.exit(1);
130
- }
131
-
132
- } catch (error) {
133
- console.error('测试过程中出错:', error);
134
- process.exit(1);
135
- }
136
- }
137
-
138
- // 运行测试
139
- runEventTests();
package/test_redis_api.js DELETED
@@ -1,135 +0,0 @@
1
- // Redis API测试文件
2
- const { MongoDB, mongodb_admin } = require('./index');
3
-
4
- async function runRedisApiTests() {
5
- console.log('开始测试Redis兼容API...\n');
6
-
7
- let cache = null;
8
- const testKeys = [];
9
-
10
- try {
11
- // 获取缓存实例
12
- cache = mongodb_admin('cache');
13
-
14
- // 测试set方法
15
- console.log('测试set方法:');
16
- const setResult = await cache.set('test_key1', 'Hello Redis!');
17
- console.log('set结果:', setResult);
18
- testKeys.push('test_key1');
19
-
20
- // 测试get方法
21
- console.log('\n测试get方法:');
22
- const getResult = await cache.get('test_key1');
23
- console.log('get结果:', getResult);
24
-
25
- // 测试不存在的键
26
- console.log('\n测试不存在的键:');
27
- const notExistsResult = await cache.get('non_existent_key');
28
- console.log('不存在键的get结果:', notExistsResult);
29
-
30
- // 测试add方法(新键)
31
- console.log('\n测试add方法(新键):');
32
- const addNewResult = await cache.add('test_key2', 'Add new value');
33
- console.log('add结果(新键):', addNewResult);
34
- testKeys.push('test_key2');
35
-
36
- // 测试add方法(已存在键)
37
- console.log('\n测试add方法(已存在键):');
38
- const addExistingResult = await cache.add('test_key1', 'Should not replace');
39
- console.log('add结果(已存在键):', addExistingResult);
40
-
41
- // 验证test_key1未被覆盖
42
- console.log('\n验证test_key1未被覆盖:');
43
- const checkResult = await cache.get('test_key1');
44
- console.log('test_key1当前值:', checkResult);
45
-
46
- // 测试set方法更新键
47
- console.log('\n测试set方法更新键:');
48
- const updateResult = await cache.set('test_key1', 'Updated value!');
49
- console.log('set更新结果:', updateResult);
50
-
51
- // 验证更新后的值
52
- console.log('\n验证更新后的值:');
53
- const updatedValue = await cache.get('test_key1');
54
- console.log('test_key1更新后的值:', updatedValue);
55
-
56
- // 测试exists方法
57
- console.log('\n测试exists方法:');
58
- const existsResult = await cache.exists('test_key1');
59
- console.log('exists结果:', existsResult);
60
-
61
- const notExistsCheck = await cache.exists('non_existent_key');
62
- console.log('不存在键的exists结果:', notExistsCheck);
63
-
64
- // 测试del方法
65
- console.log('\n测试del方法:');
66
- const delResult = await cache.del('test_key1');
67
- console.log('del结果:', delResult);
68
-
69
- // 验证删除
70
- const afterDel = await cache.get('test_key1');
71
- console.log('删除后get结果:', afterDel);
72
-
73
- // 测试批量操作
74
- console.log('\n测试批量操作:');
75
- const batchData = {
76
- 'batch_key1': 'batch_value1',
77
- 'batch_key2': 'batch_value2'
78
- };
79
- const msetResult = await cache.mset(batchData);
80
- console.log('mset结果:', msetResult);
81
- testKeys.push('batch_key1', 'batch_key2');
82
-
83
- const mgetResult = await cache.mget(['batch_key1', 'batch_key2', 'non_existent']);
84
- console.log('mget结果:', mgetResult);
85
-
86
- // 测试哈希表操作
87
- console.log('\n测试哈希表操作:');
88
- await cache.hset('hash_key', 'field1', 'hash_value1');
89
- testKeys.push('hash_key');
90
-
91
- const hgetResult = await cache.hget('hash_key', 'field1');
92
- console.log('hget结果:', hgetResult);
93
-
94
- const hgetallResult = await cache.hgetall('hash_key');
95
- console.log('hgetall结果:', hgetallResult);
96
-
97
- console.log('\n所有测试完成!');
98
-
99
- // 清理测试数据
100
- if (testKeys.length > 0) {
101
- for (const key of testKeys) {
102
- await cache.del(key);
103
- }
104
- }
105
-
106
- // 关闭连接
107
- await cache.close();
108
- console.log('\n数据库连接已关闭,测试数据已清理');
109
- process.exit(0);
110
-
111
- } catch (error) {
112
- console.error('测试过程中出错:', error);
113
-
114
- // 清理测试数据
115
- if (cache && testKeys.length > 0) {
116
- try {
117
- for (const key of testKeys) {
118
- await cache.del(key);
119
- }
120
- } catch (e) {
121
- console.error('清理数据时出错:', e);
122
- }
123
- }
124
-
125
- // 关闭连接
126
- if (cache) {
127
- await cache.close();
128
- }
129
-
130
- process.exit(1);
131
- }
132
- }
133
-
134
- // 运行测试
135
- runRedisApiTests();