Redis 的 Typescript redis.createClient()

9

我尝试将Redis(v4.0.1)连接到我的TypeScript表达式服务器上,但遇到了一些问题。我正在学习TypeScript。在redis.createClient()中的host上显示红色波浪线。有人能帮帮我吗?

const host = process.env.REDIS_HOST;
const port = process.env.REDIS_PORT;
const redisClient = redis.createClient({
  host,
  port,
});

Argument of type '{ host: string | undefined; port: string | undefined; }' is not assignable to parameter of type 'Omit<RedisClientOptions<never, RedisScripts>, "modules">'.
  Object literal may only specify known properties, and 'host' does not exist in type 'Omit<RedisClientOptions<never, RedisScripts>, "modules">'.ts(2345)
4个回答

11

当 Redis 更新到 4.0.1 版本后,选项发生了变化。 这里 可以帮助您。


4

这个正常工作了(redis v4.1.0)

const url = process.env.REDIS_URL || 'redis://localhost:6379';
const redisClient = redis.createClient({
    url
});

1

我的项目中所做的是这样的:

文件:services/internal/cache.ts

/* eslint-disable no-inline-comments */
import type { RedisClientType } from 'redis'
import { createClient } from 'redis'
import { config } from '@app/config'
import { logger } from '@app/utils/logger'

let redisClient: RedisClientType
let isReady: boolean

const cacheOptions = {
  url: config.redis.tlsFlag ? config.redis.urlTls : config.redis.url,
}

if (config.redis.tlsFlag) {
  Object.assign(cacheOptions, {
    socket: {
      // keepAlive: 300, // 5 minutes DEFAULT
      tls: false,
    },
  })
}

async function getCache(): Promise<RedisClientType> {
  if (!isReady) {
    redisClient = createClient({
      ...cacheOptions,
    })
    redisClient.on('error', err => logger.error(`Redis Error: ${err}`))
    redisClient.on('connect', () => logger.info('Redis connected'))
    redisClient.on('reconnecting', () => logger.info('Redis reconnecting'))
    redisClient.on('ready', () => {
      isReady = true
      logger.info('Redis ready!')
    })
    await redisClient.connect()
  }
  return redisClient
}

getCache().then(connection => {
  redisClient = connection
}).catch(err => {
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
  logger.error({ err }, 'Failed to connect to Redis')
})

export {
  getCache,
}


然后您只需在需要的地方导入即可:
import { getCache } from '@services/internal/cache'

    const cache = await getCache()
    cache.setEx(accountId, 60, JSON.stringify(account))

0

在redis中,不再支持使用redis.createClient添加主机和端口的选项。因此,它不包含在createClient类型中。请改用URL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接