六个框架。四个存储后端。一次导入。零依赖。

发布: (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

文档 | npm | 发布说明

如果它为你节省了时间,请给它点星标。

0 浏览
Back to Blog

相关文章

阅读更多 »

Monorepo 需要什么(真实需求)

一个 monorepo 包管理器应该处理的内容: - Workspaces:多个包/应用 - 对大型仓库的快速安装 - 确定性的 lockfile,保持相同的依赖