@dailydotdev/ts-ioredis-pool
TypeScript icon, indicating that this package has built-in type declarations

1.0.2 • Public • Published

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')
})

Dependents (0)

Package Sidebar

Install

npm i @dailydotdev/ts-ioredis-pool

Weekly Downloads

318

Version

1.0.2

License

MIT

Unpacked Size

195 kB

Total Files

15

Last publish

Collaborators

  • rebelchris
  • idoesh