2024-06-15 09:27:19 +08:00
|
|
|
|
import cfg from '../config/config.js'
|
|
|
|
|
import { execAsync, sleep } from '../utils/common.js'
|
|
|
|
|
import { createClient } from 'redis'
|
|
|
|
|
/**
|
|
|
|
|
* 初始化全局redis客户端
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
|
|
|
|
async function redisInit() {
|
|
|
|
|
const rc = cfg.redis
|
|
|
|
|
const redisUn = rc.username || ''
|
|
|
|
|
let redisPw = rc.password ? `:${rc.password}` : ''
|
|
|
|
|
if (rc.username || rc.password) {
|
|
|
|
|
redisPw += '@'
|
|
|
|
|
}
|
|
|
|
|
const redisUrl = `redis://${redisUn}${redisPw}${rc.host}:${rc.port}/${rc.db}`
|
|
|
|
|
let client = createClient({ url: redisUrl })
|
|
|
|
|
try {
|
|
|
|
|
logger.info(`正在连接 ${logger.blue(redisUrl)}`)
|
|
|
|
|
await client.connect()
|
|
|
|
|
} catch (err) {
|
|
|
|
|
logger.error(`Redis 错误:${logger.red(err)}`)
|
|
|
|
|
const cmd =
|
|
|
|
|
'redis-server --save 900 1 --save 300 10 --daemonize yes' +
|
|
|
|
|
(await aarch64())
|
|
|
|
|
logger.info('正在启动 Redis...')
|
|
|
|
|
await execAsync(cmd)
|
|
|
|
|
await sleep(1000)
|
|
|
|
|
try {
|
|
|
|
|
client = createClient({ url: redisUrl })
|
|
|
|
|
await client.connect()
|
|
|
|
|
} catch (err) {
|
|
|
|
|
logger.error(`Redis 错误:${logger.red(err)}`)
|
|
|
|
|
logger.error(`请先启动 Redis:${logger.blue(cmd)}`)
|
|
|
|
|
process.exit()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
client.on('error', async err => {
|
|
|
|
|
logger.error(`Redis 错误:${logger.red(err)}`)
|
|
|
|
|
const cmd =
|
|
|
|
|
'redis-server --save 900 1 --save 300 10 --daemonize yes' +
|
|
|
|
|
(await aarch64())
|
|
|
|
|
logger.error(`请先启动 Redis:${cmd}`)
|
|
|
|
|
process.exit()
|
|
|
|
|
})
|
|
|
|
|
/** 全局变量 redis */
|
|
|
|
|
global.redis = client as any
|
|
|
|
|
logger.info('Redis 连接成功')
|
|
|
|
|
return client
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
|
|
|
|
async function aarch64() {
|
|
|
|
|
if (process.platform == 'win32') return ''
|
|
|
|
|
return await execAsync('uname -m').then(async arch => {
|
|
|
|
|
if (arch.stdout && arch.stdout.includes('aarch64')) {
|
|
|
|
|
/** 判断redis版本 */
|
|
|
|
|
let v = await execAsync('redis-server -v')
|
|
|
|
|
if (v.stdout) {
|
|
|
|
|
const data = v.stdout.match(/v=(\d)./)
|
|
|
|
|
/** 忽略arm警告 */
|
|
|
|
|
if (data && Number(data[1]) >= 6) {
|
|
|
|
|
return ' --ignore-warnings ARM64-COW-BUG'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ''
|
|
|
|
|
})
|
|
|
|
|
}
|
2024-06-14 23:46:47 +08:00
|
|
|
|
await redisInit()
|