@hono-rate-limiter/redis
v0.1.4
Published
<div align="center">
Downloads
2,028
Maintainers
Readme
🔥@hono-rate-limiter/redis
🔥
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
import { kv } from "@vercel/kv";
const store = new RedisStore({ client: kv });
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