1010
1111const MonSQLize = require ( '../lib/index' ) ;
1212
13+ // ============================================
14+ // Redis 连接测试辅助函数
15+ // ============================================
16+
17+ async function testRedisConnection ( ) {
18+ try {
19+ const Redis = require ( 'ioredis' ) ;
20+ const redis = new Redis ( {
21+ host : process . env . REDIS_HOST || 'localhost' ,
22+ port : parseInt ( process . env . REDIS_PORT || '6379' ) ,
23+ db : 0 ,
24+ retryStrategy : ( ) => null , // 不重试
25+ lazyConnect : true ,
26+ connectTimeout : 2000 ,
27+ enableOfflineQueue : false ,
28+ maxRetriesPerRequest : 0
29+ } ) ;
30+
31+ // 抑制错误事件,避免未处理错误警告
32+ redis . on ( 'error' , ( ) => { } ) ;
33+
34+ await redis . connect ( ) ;
35+ await redis . ping ( ) ;
36+ await redis . quit ( ) ;
37+ return true ;
38+ } catch ( error ) {
39+ return false ;
40+ }
41+ }
42+
1343// ============================================
1444// 示例 1:使用内置 Redis 适配器(推荐)
1545// ============================================
@@ -47,9 +77,10 @@ async function example1_builtinAdapter() {
4777
4878 try {
4979 const { collection } = await msq . connect ( ) ;
80+ const db = msq . _adapter . db ; // 获取原生 MongoDB db 对象
5081
5182 // 插入测试数据
52- await collection ( 'products' ) . insertMany ( [
83+ await db . collection ( 'products' ) . insertMany ( [
5384 { name : 'Product A' , price : 100 , category : 'electronics' } ,
5485 { name : 'Product B' , price : 200 , category : 'electronics' } ,
5586 { name : 'Product C' , price : 300 , category : 'books' }
@@ -77,7 +108,7 @@ async function example1_builtinAdapter() {
77108 console . log ( ` - 加速: ${ ( ( Date . now ( ) - start1 ) / ( Date . now ( ) - start2 ) ) . toFixed ( 1 ) } x` ) ;
78109
79110 // 清理测试数据
80- await collection ( 'products' ) . deleteMany ( { query : { } } ) ;
111+ await db . collection ( 'products' ) . deleteMany ( { } ) ;
81112
82113 console . log ( '\n✅ 示例 1 完成\n' ) ;
83114 } catch ( error ) {
@@ -132,9 +163,10 @@ async function example2_existingRedisInstance() {
132163 } ) ;
133164
134165 const { collection } = await msq . connect ( ) ;
166+ const db = msq . _adapter . db ; // 获取原生 MongoDB db 对象
135167
136168 // 插入测试数据
137- await collection ( 'users' ) . insertMany ( [
169+ await db . collection ( 'users' ) . insertMany ( [
138170 { name : 'Alice' , age : 25 , city : 'Beijing' } ,
139171 { name : 'Bob' , age : 30 , city : 'Shanghai' } ,
140172 { name : 'Charlie' , age : 35 , city : 'Beijing' }
@@ -165,7 +197,7 @@ async function example2_existingRedisInstance() {
165197 console . log ( ` - 未命中次数: ${ stats . misses } ` ) ;
166198
167199 // 清理测试数据
168- await collection ( 'users' ) . deleteMany ( { query : { } } ) ;
200+ await db . collection ( 'users' ) . deleteMany ( { } ) ;
169201
170202 console . log ( '\n✅ 示例 2 完成\n' ) ;
171203
@@ -206,13 +238,14 @@ async function example3_policyComparison() {
206238 } ) ;
207239
208240 const { collection : col1 } = await msq1 . connect ( ) ;
209- await col1 ( 'test' ) . insertOne ( { value : 1 } ) ;
241+ const db1 = msq1 . _adapter . db ; // 获取原生 MongoDB db 对象
242+ await db1 . collection ( 'test' ) . insertOne ( { value : 1 } ) ;
210243
211244 const start1 = Date . now ( ) ;
212245 await col1 ( 'test' ) . find ( { query : { } , cache : 5000 , maxTimeMS : 3000 } ) ;
213246 console . log ( ` - 写入耗时: ${ Date . now ( ) - start1 } ms(同步写入本地 + 远端)\n` ) ;
214247
215- await col1 ( 'test' ) . deleteMany ( { query : { } } ) ;
248+ await db1 . collection ( 'test' ) . deleteMany ( { } ) ;
216249 await msq1 . close ( ) ;
217250
218251 // 策略 2: 本地优先(local-first-async-remote)
@@ -230,13 +263,14 @@ async function example3_policyComparison() {
230263 } ) ;
231264
232265 const { collection : col2 } = await msq2 . connect ( ) ;
233- await col2 ( 'test' ) . insertOne ( { value : 2 } ) ;
266+ const db2 = msq2 . _adapter . db ; // 获取原生 MongoDB db 对象
267+ await db2 . collection ( 'test' ) . insertOne ( { value : 2 } ) ;
234268
235269 const start2 = Date . now ( ) ;
236270 await col2 ( 'test' ) . find ( { query : { } , cache : 5000 , maxTimeMS : 3000 } ) ;
237271 console . log ( ` - 写入耗时: ${ Date . now ( ) - start2 } ms(同步写入本地,异步写入远端)\n` ) ;
238272
239- await col2 ( 'test' ) . deleteMany ( { query : { } } ) ;
273+ await db2 . collection ( 'test' ) . deleteMany ( { } ) ;
240274 await msq2 . close ( ) ;
241275
242276 console . log ( '✅ 示例 3 完成\n' ) ;
@@ -254,6 +288,23 @@ async function example3_policyComparison() {
254288 console . log ( ' 多层缓存示例(本地 + Redis)' ) ;
255289 console . log ( '=======================================' ) ;
256290
291+ // 检查 Redis 是否可用
292+ console . log ( '\n🔍 检查 Redis 连接...' ) ;
293+ const redisAvailable = await testRedisConnection ( ) ;
294+
295+ if ( ! redisAvailable ) {
296+ console . log ( '⚠️ Redis 不可用,跳过需要 Redis 的示例' ) ;
297+ console . log ( '💡 提示:请启动 Redis 服务以运行完整示例' ) ;
298+ console . log ( ' Windows: redis-server.exe' ) ;
299+ console . log ( ' Linux/Mac: redis-server\n' ) ;
300+ console . log ( '=======================================' ) ;
301+ console . log ( ' 示例已跳过(需要 Redis)' ) ;
302+ console . log ( '=======================================\n' ) ;
303+ process . exit ( 0 ) ;
304+ }
305+
306+ console . log ( '✅ Redis 连接正常\n' ) ;
307+
257308 await example1_builtinAdapter ( ) ;
258309 await example2_existingRedisInstance ( ) ;
259310 await example3_policyComparison ( ) ;
0 commit comments