Redis Store

The Redis store enables distributed rate limiting across multiple server instances. Essential for horizontally scaled applications.

Installation

The Redis store requires ioredis as a peer dependency:

npm install ioredis
pnpm add ioredis
yarn add ioredis
bun add ioredis

Usage

import { hitlimit } from '@joint-ops/hitlimit'
import { redisStore } from '@joint-ops/hitlimit/stores/redis'

app.use(hitlimit({
  limit: 100,
  window: '1m',
  store: redisStore({
    url: 'redis://localhost:6379'
  })
}))

Options

OptionTypeDefaultDescription
urlstring-Redis connection URL
clientRedis-Existing ioredis client instance
prefixstring'hitlimit:'Key prefix for rate limit entries

Connection Options

Connect using a URL:

redisStore({
  url: 'redis://:password@hostname:6379/0'
})

Or use an existing client:

import Redis from 'ioredis'

const redis = new Redis({
  host: 'localhost',
  port: 6379,
  password: 'secret',
  db: 0
})

redisStore({ client: redis })

Cluster Support

import Redis from 'ioredis'

const cluster = new Redis.Cluster([
  { host: 'node1', port: 6379 },
  { host: 'node2', port: 6379 },
  { host: 'node3', port: 6379 }
])

redisStore({ client: cluster })

Characteristics

  • Speed: Fast with low latency
  • Persistence: Configurable via Redis settings
  • Scalability: Shared across all server instances
  • Atomic: Uses Lua scripts for race-condition-free increments

When to Use

  • Multi-server/container deployments
  • Kubernetes or Docker Swarm clusters
  • High-traffic applications
  • When consistent rate limiting across instances is required