Я хочу использовать koa-ratelimit
(промежуточное программное обеспечение ограничителя скорости для Koa, оно использует Redis) и koa-redis
(хранилище Redis для промежуточного программного обеспечения сеанса Koa).
Примерно так:
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.У меня есть три способа сделать это:
- Префикс .Redis клиент для Node.js предоставляет возможность префикса всех используемых ключей.(https://github.com/NodeRedis/node_redis#rediscreateclient) Проблема: это выглядит как обходной путь.
- Базы данных . Сервер Redis предоставляет логические базы данных. (https://redis.io/commands/select) Проблема: Redis CLUSTER поддерживает только одну логическую базу данных.
- Отдельные экземпляры Redis . Я могу запускать отдельные экземпляры Redis на разных портах. Проблема: добавляетзначительные административные издержки.
Какой вариант лучше? Или, может быть, есть другое решение?