Skip to main content
Home

A serverless redis store for hono-rate-limiter

This package works with Cloudflare Workers, Node.js, Deno, Bun, Browsers
This package works with Cloudflare Workers
This package works with Node.js
This package works with Deno
This package works with Bun
This package works with Browsers
JSR Score
76%
Published
a year ago (0.1.4)

🔥@hono-rate-limiter/redis🔥

tests npm version npm downloads JSR license

A serverless redis store for the hono-rate-limiter middleware.

Installation

# Using npm/yarn/pnpm/bun
npm add @hono-rate-limiter/redis

Usage

Examples

Using with @vercel/kv

import { RedisStore } from "@hono-rate-limiter/redis";
import { kv } from "@vercel/kv";
import { rateLimiter } from "hono-rate-limiter";

const limiter = rateLimiter({
  windowMs: 15 * 60 * 1000, // 15 minutes
  limit: 100, // Limit each IP to 100 requests per `window` (here, per 15 minutes).
  standardHeaders: "draft-6", // draft-6: `RateLimit-*` headers; draft-7: combined `RateLimit` header
  keyGenerator: (c) => c.req.header("cf-connecting-ip") ?? "", // Method to generate custom identifiers for clients.
  store: new RedisStore({ client: kv }), // Redis, MemoryStore, etc. See below.
});

// Apply the rate limiting middleware to all requests.
app.use(limiter);

Configuration

client

The function used to send commands to Redis. The function signature is as follows:

export type RedisClient = {
  scriptLoad: (script: string) => Promise<string>;
  evalsha: <TArgs extends unknown[], TData = unknown>(sha1: string, keys: string[], args: TArgs) => Promise<TData>;
  decr: (key: string) => Promise<number>;
  del: (key: string) => Promise<number>;
};

Usage with connectors

@vercel/kv

import { kv } from "@vercel/kv";

const store = new RedisStore({ client: kv });

@upstash/redis

import { Redis } from "@upstash/redis"
/**
 * for Cloudflare
 * import { Redis } from "@upstash/redis/cloudflare"
 */

const redis = new Redis({
  url: <UPSTASH_REDIS_REST_URL>,
  token: <UPSTASH_REDIS_REST_TOKEN>,
})

const store = new RedisStore({ client: redis })

prefix

The text to prepend to the key in Redis.

Defaults to hrl:.

resetExpiryOnChange

Whether to reset the expiry for a particular key whenever its hit count changes.

Defaults to false.

Contributing

We would love to have more contributors involved!

To get started, please read our Contributing Guide.

Credits

The @hono-rate-limiter/redis project is heavily inspired by rate-limit-redis

New Ticket: Report package

Please provide a reason for reporting this package. We will review your report and take appropriate action.

Please review the JSR usage policy before submitting a report.

Add Package

deno add jsr:@hono-rate-limiter/redis

Import symbol

import * as redis from "@hono-rate-limiter/redis";
or

Import directly with a jsr specifier

import * as redis from "jsr:@hono-rate-limiter/redis";

Add Package

pnpm i jsr:@hono-rate-limiter/redis
or (using pnpm 10.8 or older)
pnpm dlx jsr add @hono-rate-limiter/redis

Import symbol

import * as redis from "@hono-rate-limiter/redis";

Add Package

yarn add jsr:@hono-rate-limiter/redis
or (using Yarn 4.8 or older)
yarn dlx jsr add @hono-rate-limiter/redis

Import symbol

import * as redis from "@hono-rate-limiter/redis";

Add Package

vlt install jsr:@hono-rate-limiter/redis

Import symbol

import * as redis from "@hono-rate-limiter/redis";

Add Package

npx jsr add @hono-rate-limiter/redis

Import symbol

import * as redis from "@hono-rate-limiter/redis";

Add Package

bunx jsr add @hono-rate-limiter/redis

Import symbol

import * as redis from "@hono-rate-limiter/redis";