我想一起使用koa-ratelimit
(用于Koa的速率限制器中间件,它使用Redis)和koa-redis
(用于Koa会话中间件的Redis存储)。
类似的东西:
import ratelimit from "koa-ratelimit";
import Redis from "ioredis";
import Router from "koa-router";
import session from "koa-generic-session";
import redisStore from "koa-redis";
import Koa from "koa";
const app = new Koa();
const router = new Router();
const redisClient = new Redis();
router.post(
"/auth",
ratelimit({
db: redisClient,
duration: 60000,
errorMessage: "Sometimes You Just Have to Slow Down.",
id: (ctx) => ctx.ip,
headers: {
remaining: "Rate-Limit-Remaining",
reset: "Rate-Limit-Reset",
total: "Rate-Limit-Total",
},
max: 100,
disableHeader: false,
}),
);
app
.use(session({
store: redisStore({
client: redisClient,
}),
}))
.use(router.routes())
.use(router.allowedMethods());
两个库都需要Redis客户端。 我想在Redis中将它们分开。 我有三种方法可以做到:
哪个选项更好? 也许还有另一种解决方案?
答案 0 :(得分:1)
选项3可能是最好的选择,Redis实例非常轻巧,启动另一个实例不会产生太多开销。
此外,如果您将来希望将那些“数据库”分开或进行不同的集群部署,这将使您的生活更轻松。
答案 1 :(得分:0)
您可以使用rate-limiter-flexible。
它允许使用keyPrefix
选项创建koa中间件来进行速率限制,并使用相同的Redis客户端koa-redis
。