六个框架。四个存储后端。一次导入。零依赖。
发布: (2026年2月22日 GMT+8 13:31)
3 分钟阅读
原文: Dev.to
Source: Dev.to

在任何地方使用相同的 API
// Express
import { hitlimit } from '@joint-ops/hitlimit';
app.use(hitlimit({ limit: 100, window: '1m' }));
// Fastify
import { hitlimit } from '@joint-ops/hitlimit/fastify';
await app.register(hitlimit, { limit: 100, window: '1m' });
// Hono
import { hitlimit } from '@joint-ops/hitlimit/hono';
app.use(hitlimit({ limit: 100, window: '1m' }));
// NestJS
import { HitLimitModule, HitLimitGuard } from '@joint-ops/hitlimit/nest';
@Module({
imports: [HitLimitModule.register({ limit: 100, window: '1m' })],
providers: [{ provide: APP_GUARD, useClass: HitLimitGuard }],
})
export class AppModule {}
// Bun.serve
import { hitlimit } from '@joint-ops/hitlimit-bun';
Bun.serve({ fetch: hitlimit({ limit: 100, window: '1m' }, handler) });
// Elysia
import { hitlimit } from '@joint-ops/hitlimit-bun/elysia';
new Elysia().use(hitlimit({ limit: 100, window: '1m' })).listen(3000);
明天切换框架。你的限流代码保持不变。
内置 4 种存储后端
// Memory (default) – fastest, no setup
app.use(hitlimit({ limit: 100, window: '1m' }));
// SQLite – survives restarts
app.use(hitlimit({ store: sqliteStore({ path: './limits.db' }), limit: 100, window: '1m' }));
// Redis – distributed across instances
app.use(hitlimit({ store: redisStore({ url: process.env.REDIS_URL }), limit: 100, window: '1m' }));
// Postgres – use your existing database
app.use(hitlimit({ store: postgresStore({ pool }), limit: 100, window: '1m' }));
第一天使用内存。规模扩大时迁移到 Postgres 或 Redis。其他都不需要更改。
v1.2.0 新增:PostgreSQL 存储
import { postgresStore } from '@joint-ops/hitlimit/stores/postgres';
import { Pool } from 'pg';
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
app.use(
hitlimit({
limit: 100,
window: '1m',
store: postgresStore({ pool }),
})
);
每个请求只执行一次原子查询。零竞争条件。首次运行时会自动创建表。使用命名预处理语句可降低 30‑40 % 的延迟。无需管理新基础设施。
快速
Node.js (10K unique IPs)
Memory 3.16M ops/s 316ns
SQLite 352K ops/s 2.8µs
Redis 6.7K ops/s 149µs
Postgres 3.0K ops/s 336µs
Bun (10K unique IPs)
Memory 8.32M ops/s 120ns
bun:sqlite 325K ops/s 3.1µs
Redis 6.7K ops/s 148µs
Postgres 3.7K ops/s 273µs
峰值:12.38 M ops/s(Bun),4.83 M ops/s(Node.js)。
所有基准测试都是开源的: 。
不仅仅是计数器
- 分层限额,适用于免费、专业和企业套餐。
- 自动封禁,在 N 次违规后封禁重复违规者。
- 分组限额,用于团队或组织配额。
- 跳过规则,用于健康检查、管理员、内部路由。
- 人类可读的窗口,如
'15m'、'1h'、'1d',而不是毫秒。
全部内置。零依赖。
快速开始
npm install @joint-ops/hitlimit # Node.js
bun add @joint-ops/hitlimit-bun # Bun
如果它为你节省了时间,请给它点星标。