mm_redis 1.8.2 → 1.9.1

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_redis",
3
- "version": "1.8.2",
3
+ "version": "1.9.1",
4
4
  "description": "高效的Redis客户端封装库,提供连接池管理、数据类型操作、错误处理和批量操作优化",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/test.js CHANGED
@@ -1,9 +1,9 @@
1
- const Redis = require('./index.js').Redis;
1
+ const { redis_admin } = require('./index.js');
2
2
 
3
3
  async function test() {
4
4
  try {
5
5
  var bl, num, arr = [];
6
- var rs = new Redis();
6
+ var rs = redis_admin('sys');
7
7
  var config = './config.json'.loadJson(__dirname);
8
8
  rs.setConfig(config);
9
9
  await rs.open();
@@ -1,63 +0,0 @@
1
- ```markdown
2
- # 三种缓存方式方法兼容性对比表格
3
-
4
- ## 核心缓存方法
5
-
6
- | 方法名 | Redis | MongoDB | CacheBase | 状态说明 |
7
- |-------|-------|---------|-----------|----------|
8
- | set | ✅ | ✅ | ✅ | 完全兼容 |
9
- | get | ✅ | ✅ | ✅ | 完全兼容 |
10
- | del | ✅ | ✅ | ✅ | 完全兼容 |
11
- | has | ✅ | ✅ | ✅ | 完全兼容 |
12
- | clear | ✅ | ✅ | ✅ | 完全兼容 |
13
- | keys | ✅ | ✅ | ✅ | 完全兼容 |
14
- | ttl | ✅ | ✅ | ✅ | 完全兼容 |
15
- | add | ✅ | ✅ | ✅ | 完全兼容 |
16
- | addInt | ✅ | ✅ | ✅ | 完全兼容 |
17
- | addStr | ✅ | ✅ | ✅ | 完全兼容 |
18
- | sort | ✅ | ✅ | ✅ | 模拟实现 |
19
-
20
- ## Redis兼容方法 - 哈希表操作
21
-
22
- | 方法名 | Redis | MongoDB | CacheBase | 状态说明 |
23
- |-------|-------|---------|-----------|----------|
24
- | hset | ✅ | ✅ | ✅ | 模拟实现,通过set对象方式 |
25
- | hget | ✅ | ✅ | ✅ | 模拟实现,通过get对象方式 |
26
- | hgetall | ✅ | ✅ | ✅ | 模拟实现,返回完整对象 |
27
- | hdel | ✅ | ✅ | ✅ | 模拟实现,删除对象属性 |
28
- | hexists | ✅ | ❌ | ❌ | 完全实现 |
29
- | hkeys | ✅ | ❌ | ❌ | 完全实现 |
30
- | hvals | ✅ | ❌ | ❌ | 完全实现 |
31
-
32
- ## Redis兼容方法 - 集合操作
33
-
34
- | 方法名 | Redis | MongoDB | CacheBase | 状态说明 |
35
- |-------|-------|---------|-----------|----------|
36
- | sadd | ✅ | ❌ | ❌ | 完全实现 |
37
- | srem | ✅ | ❌ | ❌ | 完全实现 |
38
- | sismember | ✅ | ❌ | ❌ | 完全实现 |
39
- | smembers | ✅ | ❌ | ❌ | 完全实现 |
40
- | scard | ✅ | ❌ | ❌ | 完全实现 |
41
-
42
- ## Redis兼容方法 - 有序集合操作
43
-
44
- | 方法名 | Redis | MongoDB | CacheBase | 状态说明 |
45
- |-------|-------|---------|-----------|----------|
46
- | zadd | ✅ | ❌ | ❌ | 完全实现 |
47
- | zrem | ✅ | ❌ | ❌ | 完全实现 |
48
- | zrange | ✅ | ❌ | ❌ | 完全实现 |
49
- | zscore | ✅ | ❌ | ❌ | 完全实现 |
50
-
51
- ## Redis兼容方法 - 其他常用命令
52
-
53
- | 方法名 | Redis | MongoDB | CacheBase | 状态说明 |
54
- |-------|-------|---------|-----------|----------|
55
- | expire | ✅ | ✅ | ✅ | 兼容,内部映射到ttl |
56
- | incr | ✅ | ⚠️ | ✅ | Redis原生支持,MongoDB返回undefined,CacheBase通过addInt模拟 |
57
- | decr | ✅ | ⚠️ | ✅ | Redis原生支持,MongoDB返回undefined,CacheBase通过addInt模拟 |
58
- | exists | ✅ | ✅ | ✅ | 兼容,内部映射到has |
59
- | mget | ✅ | ⚠️ | ✅ | 已修复为返回数组格式,与原生Redis一致 |
60
- | mset | ✅ | ✅ | ✅ | 已修复参数格式处理,添加了格式验证 |
61
-
62
- 注:✅ 完全兼容/功能正常 | ⚠️ 部分兼容/有异常 | ❌ 不兼容/未实现
63
- ```
@@ -1,191 +0,0 @@
1
- // 修复导入方式
2
- const redisModule = require('./index.js');
3
- const Redis = redisModule.default || redisModule;
4
- const $ = { log: { debug: console.log, error: console.error } };
5
-
6
- async function testSetOperations() {
7
- console.log('=== 测试集合(Set)操作方法 ===');
8
-
9
- const redis = new Redis({
10
- host: 'localhost',
11
- port: 6379,
12
- prefix: 'test:',
13
- $: $,
14
- mock: true
15
- });
16
-
17
- try {
18
- // 测试sadd - 添加成员到集合
19
- console.log('\n1. 测试sadd方法');
20
- const saddResult = await redis.sadd('set1', 'member1', 'member2', 'member3');
21
- console.log('添加成员结果:', saddResult); // 预期: 3
22
-
23
- // 测试smembers - 获取集合所有成员
24
- console.log('\n2. 测试smembers方法');
25
- const members = await redis.smembers('set1');
26
- console.log('集合成员:', members); // 预期: ['member1', 'member2', 'member3']
27
-
28
- // 测试sismember - 检查成员是否在集合中
29
- console.log('\n3. 测试sismember方法');
30
- const isMember1 = await redis.sismember('set1', 'member1');
31
- const isMember4 = await redis.sismember('set1', 'member4');
32
- console.log('member1是否在集合中:', isMember1); // 预期: true
33
- console.log('member4是否在集合中:', isMember4); // 预期: false
34
-
35
- // 测试scard - 获取集合成员数量
36
- console.log('\n4. 测试scard方法');
37
- const count = await redis.scard('set1');
38
- console.log('集合成员数量:', count); // 预期: 3
39
-
40
- // 测试srem - 从集合中移除成员
41
- console.log('\n5. 测试srem方法');
42
- const sremResult = await redis.srem('set1', 'member1', 'member4');
43
- console.log('移除成员结果:', sremResult); // 预期: 1
44
-
45
- // 测试集合操作后的状态
46
- const afterRemove = await redis.smembers('set1');
47
- console.log('移除后集合成员:', afterRemove); // 预期: ['member2', 'member3']
48
-
49
- // 测试集合运算 - 创建第二个集合
50
- console.log('\n6. 测试集合运算');
51
- await redis.sadd('set2', 'member2', 'member4', 'member5');
52
- console.log('set2成员:', await redis.smembers('set2'));
53
-
54
- // 测试sinter - 集合交集
55
- const intersection = await redis.sinter('set1', 'set2');
56
- console.log('集合交集:', intersection); // 预期: ['member2']
57
-
58
- // 测试sunion - 集合并集
59
- const union = await redis.sunion('set1', 'set2');
60
- console.log('集合并集:', union); // 预期: ['member2', 'member3', 'member4', 'member5']
61
-
62
- // 测试sdiff - 集合差集
63
- const diff = await redis.sdiff('set1', 'set2');
64
- console.log('集合差集(set1-set2):', diff); // 预期: ['member3']
65
-
66
- } catch (error) {
67
- console.error('集合操作测试失败:', error);
68
- } finally {
69
- await redis.close();
70
- }
71
- }
72
-
73
- async function testSortedSetOperations() {
74
- console.log('\n=== 测试有序集合(Sorted Set)操作方法 ===');
75
-
76
- const redis = new Redis({
77
- host: 'localhost',
78
- port: 6379,
79
- prefix: 'test:',
80
- $: $,
81
- mock: true
82
- });
83
-
84
- try {
85
- // 测试zadd - 添加成员到有序集合
86
- console.log('\n1. 测试zadd方法');
87
- await redis.zadd('zset1', 10, 'member1');
88
- await redis.zadd('zset1', 5, 'member2');
89
- await redis.zadd('zset1', 15, 'member3');
90
- console.log('已添加成员到有序集合');
91
-
92
- // 测试zcard - 获取有序集合成员数量
93
- console.log('\n2. 测试zcard方法');
94
- const zcount = await redis.zcard('zset1');
95
- console.log('有序集合成员数量:', zcount); // 预期: 3
96
-
97
- // 测试zscore - 获取成员分数
98
- console.log('\n3. 测试zscore方法');
99
- const score1 = await redis.zscore('zset1', 'member1');
100
- const score4 = await redis.zscore('zset1', 'member4');
101
- console.log('member1的分数:', score1); // 预期: 10
102
- console.log('member4的分数:', score4); // 预期: null
103
-
104
- // 测试zrank - 获取成员排名
105
- console.log('\n4. 测试zrank方法');
106
- const rank1 = await redis.zrank('zset1', 'member1');
107
- const rank2 = await redis.zrank('zset1', 'member2');
108
- console.log('member1的排名:', rank1); // 预期: 1
109
- console.log('member2的排名:', rank2); // 预期: 0
110
-
111
- // 测试zrange - 获取指定范围的成员
112
- console.log('\n5. 测试zrange方法');
113
- const range = await redis.zrange('zset1', 0, -1);
114
- console.log('所有成员(按分数排序):', range); // 预期: ['member2', 'member1', 'member3']
115
-
116
- // 测试zincrby - 增加成员分数
117
- console.log('\n6. 测试zincrby方法');
118
- const newScore = await redis.zincrby('zset1', 3, 'member2');
119
- console.log('member2增加后的分数:', newScore); // 预期: 8
120
-
121
- // 测试分数变化后的排名
122
- const newRank = await redis.zrank('zset1', 'member2');
123
- console.log('member2新排名:', newRank); // 预期: 0
124
-
125
- // 测试zrem - 从有序集合中移除成员
126
- console.log('\n7. 测试zrem方法');
127
- const zremResult = await redis.zrem('zset1', 'member1');
128
- console.log('移除成员结果:', zremResult); // 预期: 1
129
-
130
- // 测试移除后的集合状态
131
- const afterRemove = await redis.zrange('zset1', 0, -1);
132
- console.log('移除后集合成员:', afterRemove); // 预期: ['member2', 'member3']
133
-
134
- } catch (error) {
135
- console.error('有序集合操作测试失败:', error);
136
- } finally {
137
- await redis.close();
138
- }
139
- }
140
-
141
- async function testHashOperations() {
142
- console.log('\n=== 测试哈希(Hash)操作方法 ===');
143
-
144
- const redis = new Redis({
145
- host: 'localhost',
146
- port: 6379,
147
- prefix: 'test:',
148
- $: $,
149
- mock: true
150
- });
151
-
152
- try {
153
- // 测试hset和hexists
154
- console.log('\n1. 测试hexists方法');
155
- await redis.hset('hash1', 'field1', 'value1');
156
- await redis.hset('hash1', 'field2', 'value2');
157
-
158
- const exists1 = await redis.hexists('hash1', 'field1');
159
- const exists3 = await redis.hexists('hash1', 'field3');
160
- console.log('field1是否存在:', exists1); // 预期: true
161
- console.log('field3是否存在:', exists3); // 预期: false
162
-
163
- // 测试hkeys
164
- console.log('\n2. 测试hkeys方法');
165
- const keys = await redis.hkeys('hash1');
166
- console.log('哈希字段名:', keys); // 预期: ['field1', 'field2']
167
-
168
- // 测试hvals
169
- console.log('\n3. 测试hvals方法');
170
- const values = await redis.hvals('hash1');
171
- console.log('哈希字段值:', values); // 预期: ['value1', 'value2']
172
-
173
- } catch (error) {
174
- console.error('哈希操作测试失败:', error);
175
- } finally {
176
- await redis.close();
177
- }
178
- }
179
-
180
- async function runAllTests() {
181
- try {
182
- await testHashOperations();
183
- await testSetOperations();
184
- await testSortedSetOperations();
185
- console.log('\n=== 所有测试完成! ===');
186
- } catch (error) {
187
- console.error('测试执行失败:', error);
188
- }
189
- }
190
-
191
- runAllTests();
package/test_export.js DELETED
@@ -1,21 +0,0 @@
1
- // 测试redis_admin函数导出
2
- const { Redis, redis_admin } = require('./index.js');
3
-
4
- console.log('=== 测试redis_admin导出 ===');
5
- console.log('Redis类是否存在:', typeof Redis === 'function');
6
- console.log('redis_admin函数是否存在:', typeof redis_admin === 'function');
7
-
8
- if (typeof redis_admin === 'function') {
9
- console.log('✅ redis_admin函数导出成功!');
10
- try {
11
- // 尝试创建实例
12
- const redis = redis_admin('test_scope');
13
- console.log('成功通过redis_admin创建实例:', redis instanceof Redis);
14
- } catch (error) {
15
- console.error('创建实例时出错:', error.message);
16
- }
17
- } else {
18
- console.error('❌ redis_admin函数导出失败!');
19
- }
20
-
21
- console.log('=== 测试完成 ===');
package/test_mget_mset.js DELETED
@@ -1,56 +0,0 @@
1
- const redisModule = require('./index.js');
2
- const Redis = redisModule.default || redisModule;
3
- const $ = { log: { debug: console.log, error: console.error } };
4
-
5
- async function testMGetAndMSet() {
6
- console.log('=== 测试mget和mset方法兼容性修复 ===');
7
-
8
- const redis = new Redis({
9
- host: 'localhost',
10
- port: 6379,
11
- prefix: 'test:',
12
- $: $,
13
- mock: true
14
- });
15
-
16
- try {
17
- // 测试1: mset方法 - 批量设置
18
- console.log('\n1. 测试mset方法 - 批量设置键值对');
19
- const msetResult = await redis.mset({
20
- 'test_key1': 'test_value1',
21
- 'test_key2': 'test_value2',
22
- 'test_key3': { name: 'test_object' }
23
- });
24
- console.log('mset结果:', msetResult); // 预期: true
25
-
26
- // 测试2: mget方法 - 批量获取
27
- console.log('\n2. 测试mget方法 - 批量获取值(返回数组格式)');
28
- const keysToGet = ['test_key1', 'test_key2', 'test_key3', 'non_existent_key'];
29
- const mgetResult = await redis.mget(keysToGet);
30
- console.log('mget结果类型:', Array.isArray(mgetResult) ? '数组(正确)' : '对象(错误)');
31
- console.log('mget结果长度:', mgetResult.length); // 预期: 4
32
- console.log('mget结果内容:', mgetResult);
33
-
34
- // 验证数组索引与输入键的对应关系
35
- console.log('\n3. 验证数组索引与输入键的对应关系');
36
- keysToGet.forEach((key, index) => {
37
- console.log(`${key} -> ${JSON.stringify(mgetResult[index])}`);
38
- });
39
-
40
- // 测试3: 单独获取验证数据是否正确设置
41
- console.log('\n4. 单独获取验证数据是否正确设置');
42
- const key1Value = await redis.get('test_key1');
43
- const key3Value = await redis.get('test_key3');
44
- console.log('test_key1值:', key1Value); // 预期: 'test_value1'
45
- console.log('test_key3值类型:', typeof key3Value);
46
- console.log('test_key3值内容:', key3Value);
47
-
48
- } catch (error) {
49
- console.error('测试失败:', error);
50
- } finally {
51
- await redis.close();
52
- }
53
- }
54
-
55
- // 运行测试
56
- testMGetAndMSet();