Skip to content

Latest commit

 

History

History
90 lines (72 loc) · 2.46 KB

README.md

File metadata and controls

90 lines (72 loc) · 2.46 KB

ts-ioredis-pool

CI

Connection pooling for ioredis in TypeScript.

Supports

  • Node 10+
  • Redis 4+

Usage

Basic usage:

// In some file (e.g. src/pool.ts)
const ioRedisPoolOpts = IORedisPoolOptions
  .fromUrl(process.env.REDIS_URL as string)
  // This accepts the RedisOptions class from ioredis as an argument
  // https://github.com/luin/ioredis/blob/master/lib/redis/RedisOptions.ts
  .withIORedisOptions({
    name: 'test',
    keyPrefix: 'ioredis_test_',
  })
  // This accepts the Options class from @types/generic-pool as an argument
  // https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/generic-pool/index.d.ts#L36
  .withPoolOptions({
    min: 2,
    max: 20,
  })

export const ioRedisPool = new IORedisPool(ioRedisPoolOpts)

// In some other file (e.g. src/myfile.ts)
import { ioRedisPool } from './pool.ts'

// ...some code

async function setRedis(key: string, obj: any) {
  const client = await pool.getConnection()
  if (client) {
    client.set(key, obj)

    // Don't forget to release your connection
    await pool.release(client)
  }
}

You can also connect via host and port:

// In some file (e.g. src/pool.ts)
const ioRedisPoolOpts = IORedisPoolOptions
  .fromHostAndPort(
    process.env.REDIS_HOST as string,
    parseInt(process.env.REDIS_PORT as string)
  )
  .withIORedisOptions({
    name: 'test',
    keyPrefix: 'ioredis_test_',
    password: process.env.REDIS_PASS as string,
  })
  .withPoolOptions({
    min: 2,
    max: 20,
  })

export const ioRedisPool = new IORedisPool(ioRedisPoolOpts)

A more anonymous way of executing redis commands. This allows you access to the ioredis client methods while also managing the acquisition and release of the connections from the pool for you so you don't have to worry about it.

// assuming you already have an IORedisPool instance
const someValue = await ioRedisPool.execute(async (client) => {
  // Here you have access to ioredis commands
  return await client.get('some-key')
})

// You can run multiple commands
await ioRedisPool.execute(async (client) => {
  // Here you have access to ioredis commands
  const set = client.set('some-key', 'some-value')
  const del = client.del('some-other-key')

  await Promise.all([set, del])
  return await client.get('another-key')
})