mm_mongodb 1.4.7 → 1.4.9

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,14 +1,13 @@
1
1
  {
2
2
  "name": "mm_mongodb",
3
- "version": "1.4.7",
3
+ "version": "1.4.9",
4
4
  "description": "MongoDB数据库操作模块,提供简洁易用的API、缓存功能以及完整的Redis兼容接口,支持事件系统、事务和连接池管理",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
7
  "test": "node test.js",
8
8
  "test:events": "node test_events.js",
9
- "test:redis": "node test_redis.js",
10
- "test:redis-extended": "node test_redis_extended.js",
11
- "test:advanced": "node test_advanced.js"
9
+ "test:redis": "node test_redis_api.js",
10
+ "test:redis-compatibility": "node test_redis_compatibility.js"
12
11
  },
13
12
  "repository": {
14
13
  "type": "git",
@@ -37,7 +36,7 @@
37
36
  },
38
37
  "homepage": "https://gitee.com/qiuwenwu91/mm_mongodb#readme",
39
38
  "dependencies": {
40
- "mm_logs": "^1.5.2",
39
+ "mm_base_service": "^1.0.0",
41
40
  "mongodb": "^6.20.0"
42
41
  }
43
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", __dirname);
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/test2.js CHANGED
@@ -1,18 +1,11 @@
1
1
  const { MongoDB, mongoDB_admin } = require('./index.js');
2
2
 
3
- async function test2() {
4
- var mb = mongoDB_admin("sys");
5
- mb.setConfig();
6
- // mb.open();
7
- console.log(mb);
8
- }
9
- // test2();
10
3
 
11
4
  /* 调用示例 */
12
5
  async function test() {
13
6
  console.log("测试开始");
14
7
  // 实例化构造函数,传入服务器地址和数据库名
15
- var mb = new MongoDB("localhost", "mm");
8
+ var mb = new MongoDB("localhost");
16
9
  mb.setConfig();
17
10
 
18
11
  await mb.open();
@@ -1,122 +0,0 @@
1
- # 三种缓存方式方法兼容性对比表格
2
-
3
- ## 核心缓存方法
4
-
5
- | 方法名 | Redis | MongoDB | CacheBase | 状态说明 |
6
- |-------|-------|---------|-----------|----------|
7
- | set | ✅ | ✅ | ✅ | 所有方式均正常工作 |
8
- | get | ✅ | ✅ | ✅ | 所有方式均正常工作 |
9
- | del | ✅ | ✅ | ✅ | 所有方式均正常工作 |
10
- | has | ✅ | ✅ | ✅ | 所有方式均正常工作 |
11
- | clear | ✅ | ✅ | ✅ | 所有方式均正常工作 |
12
- | keys | ✅ | ✅ | ✅ | 所有方式均正常工作 |
13
- | ttl | ✅ | ✅ | ✅ | 所有方式均正常工作 |
14
- | add | ✅ | ✅ | ✅ | 所有方式均正常工作 |
15
- | addInt | ✅ | ✅ | ✅ | 所有方式均正常工作 |
16
- | addStr | ✅ | ✅ | ✅ | 所有方式均正常工作 |
17
- | sort | ✅ | ✅ | ✅ | 所有方式均正常工作 |
18
-
19
- ## Redis兼容方法 - 哈希表操作
20
-
21
- | 方法名 | Redis | MongoDB | CacheBase | 状态说明 |
22
- |-------|-------|---------|-----------|----------|
23
- | hset | ✅ | ✅ | ✅ | 所有方式均正常工作 |
24
- | hget | ✅ | ✅ | ✅ | 所有方式均正常工作 |
25
- | hgetall | ✅ | ✅ | ✅ | 所有方式均正常工作 |
26
- | hdel | ✅ | ✅ | ✅ | 所有方式均正常工作 |
27
- | hexists | ❌ | ❌ | ❌ | 已移除,测试确认不可用 |
28
- | hkeys | ❌ | ❌ | ❌ | 已移除 |
29
- | hvals | ❌ | ❌ | ❌ | 已移除 |
30
-
31
- ## Redis兼容方法 - 其他常用命令
32
-
33
- | 方法名 | Redis | MongoDB | CacheBase | 状态说明 |
34
- |-------|-------|---------|-----------|----------|
35
- | expire | ✅ | ✅ | ✅ | 所有方式均正常工作 |
36
- | incr | ✅ | ✅ | ✅ | 所有方式均返回正确数值 |
37
- | decr | ✅ | ✅ | ✅ | 所有方式均返回正确数值 |
38
- | exists | ✅ | ✅ | ✅ | 所有方式均正常工作 |
39
- | mget | ✅ | ✅ | ✅ | 所有方式均返回正确格式的数组 |
40
- | mset | ✅ | ✅ | ✅ | 所有方式均正常工作 |
41
-
42
- ## 数组/列表操作方法
43
-
44
- | 方法名 | Redis | MongoDB | CacheBase | 状态说明 |
45
- |-------|-------|---------|-----------|----------|
46
- | list_set | ❌ | ❌ | ❌ | 测试确认不支持 |
47
- | list_get | ❌ | ❌ | ❌ | 未测试,预计不支持 |
48
- | list_len | ❌ | ❌ | ❌ | 未测试,预计不支持 |
49
- | list_push | ❌ | ❌ | ❌ | 未测试,预计不支持 |
50
- | list_pop | ❌ | ❌ | ❌ | 未测试,预计不支持 |
51
-
52
- ## 全面兼容性测试结果总结
53
-
54
- 根据所有测试文件的运行结果,我们得到了全面的兼容性情况:
55
-
56
- ### 所有缓存方式都支持的功能:
57
- - **哈希表基本操作**:hset, hget, hgetall, hdel
58
- - **核心Redis命令**:set, get, expire, exists, mset
59
- - **缓存管理功能**:clear, keys, 缓存池, 缓存清理
60
- - **缓存方式切换**:可以在cachebase、redis、mongodb之间正常切换
61
-
62
- ### CacheBase 缓存方式:
63
- - **完全兼容**:所有测试都成功通过
64
- - **返回值**:所有操作都返回符合预期的结果
65
- - **数组操作**:不支持list_set等数组操作方法
66
-
67
- ### Redis 缓存方式:
68
- - **完全兼容**:所有测试都成功通过
69
- - **连接状态**:成功连接Redis服务器,连接池正常工作
70
- - **返回值**:incr/decr返回正确数值(11, 10)
71
- - **数组操作**:不支持list_set等数组操作方法
72
-
73
- ### MongoDB 缓存方式:
74
- - **功能执行成功**:所有操作都能正确修改数据
75
- - **返回值正常**:所有方法都返回符合Redis兼容格式的结果
76
- - **数组操作**:不支持list_set等数组操作方法
77
-
78
- ### 已确认移除的方法:
79
- - hexists:测试中报错 "TypeError: cache.hexists is not a function"
80
- - 所有列表/数组操作方法:测试中报错 "Error: 不支持的方法: list_set"
81
-
82
- ## 最佳使用建议
83
-
84
- 1. **CacheBase 方式**(推荐):
85
- - 所有功能完全兼容,返回值符合预期
86
- - 性能稳定,在多次依赖更新中保持一致表现
87
- - 适合所有缓存场景,特别是对稳定性要求高的情况
88
- - 不需要额外的外部服务依赖
89
-
90
- 2. **Redis 方式**(推荐):
91
- - 依赖更新后已修复兼容性问题,现在可以正常使用
92
- - 所有功能完全兼容,返回值符合预期
93
- - 适合需要高性能、分布式缓存或Redis特有功能的场景
94
- - 需要外部Redis服务
95
-
96
- 3. **MongoDB 方式**(推荐):
97
- - 可用于需要持久化且数据结构较简单的场景
98
- - **重要注意事项**:
99
- - 适合需要持久化缓存且需要Redis兼容API的场景
100
- - 所有Redis兼容方法都能返回正确格式的结果
101
- - 需要外部MongoDB服务
102
-
103
- ## 实际使用建议
104
-
105
- 1. **开发环境**:推荐使用CacheBase,无需额外配置,使用简单
106
-
107
- 2. **生产环境**:
108
- - 如果需要高性能、分布式缓存:使用Redis
109
- - 如果需要缓存持久化且已有MongoDB环境:可使用MongoDB
110
- - 大多数场景下,CacheBase已足够应对
111
-
112
- 3. **跨环境部署**:
113
- - 可以根据环境配置自动切换缓存方式
114
- - 确保代码不依赖特定缓存方式的返回值特性(特别是MongoDB)
115
-
116
- 4. **性能考虑**:
117
- - CacheBase:内存操作,最快但不持久化
118
- - Redis:网络操作,但性能优秀
119
- - MongoDB:网络+磁盘操作,性能相对较低
120
-
121
- ## 兼容性维护建议
122
- 注:✅ 完全兼容/功能正常 | ⚠️ 功能正常但返回值异常 | ❌ 不兼容/未实现/已移除
package/test_redis_api.js DELETED
@@ -1,66 +0,0 @@
1
- const MongoDB = require('./index').MongoDB;
2
-
3
- async function testRedisAPI() {
4
- console.log('开始测试Redis兼容API...');
5
-
6
- // 初始化数据库连接
7
- const db = new MongoDB({
8
- url: 'mongodb://localhost:27017',
9
- dbName: 'test_db',
10
- table: 'test_redis_cache'
11
- });
12
-
13
- try {
14
- // 测试set方法
15
- console.log('\n测试set方法:');
16
- const setResult = await db.set('test_key1', 'Hello Redis!');
17
- console.log('set结果:', setResult);
18
-
19
- // 测试get方法
20
- console.log('\n测试get方法:');
21
- const getResult = await db.get('test_key1');
22
- console.log('get结果:', getResult);
23
-
24
- // 测试不存在的键
25
- console.log('\n测试不存在的键:');
26
- const notExistResult = await db.get('non_existent_key');
27
- console.log('不存在键的get结果:', notExistResult);
28
-
29
- // 测试add方法 - 添加新键
30
- console.log('\n测试add方法(新键):');
31
- const addResult1 = await db.add('test_key2', { name: 'MongoDB', type: 'database' });
32
- console.log('add结果(新键):', addResult1);
33
-
34
- // 测试add方法 - 添加已存在的键
35
- console.log('\n测试add方法(已存在键):');
36
- const addResult2 = await db.add('test_key1', 'This should not override');
37
- console.log('add结果(已存在键):', addResult2);
38
-
39
- // 验证test_key1的值没有被覆盖
40
- console.log('\n验证test_key1未被覆盖:');
41
- const verifyResult = await db.get('test_key1');
42
- console.log('test_key1当前值:', verifyResult);
43
-
44
- // 测试set方法更新已有键
45
- console.log('\n测试set方法更新键:');
46
- const updateResult = await db.set('test_key1', 'Updated value!');
47
- console.log('set更新结果:', updateResult);
48
-
49
- // 验证更新后的值
50
- console.log('\n验证更新后的值:');
51
- const updatedValue = await db.get('test_key1');
52
- console.log('test_key1更新后的值:', updatedValue);
53
-
54
- console.log('\n所有测试完成!');
55
- } catch (error) {
56
- console.error('测试过程中出现错误:', error);
57
- } finally {
58
- // 清理测试数据
59
- await db.delete({ key: { $in: ['test_key1', 'test_key2'] } });
60
- await db.close();
61
- console.log('\n数据库连接已关闭,测试数据已清理');
62
- }
63
- }
64
-
65
- // 运行测试
66
- testRedisAPI();