Как разделить данные внутри Redis? - PullRequest
0 голосов
/ 22 декабря 2018

Я хочу использовать 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.У меня есть три способа сделать это:

  1. Префикс .Redis клиент для Node.js предоставляет возможность префикса всех используемых ключей.(https://github.com/NodeRedis/node_redis#rediscreateclient) Проблема: это выглядит как обходной путь.
  2. Базы данных . Сервер Redis предоставляет логические базы данных. (https://redis.io/commands/select) Проблема: Redis CLUSTER поддерживает только одну логическую базу данных.
  3. Отдельные экземпляры Redis . Я могу запускать отдельные экземпляры Redis на разных портах. Проблема: добавляетзначительные административные издержки.

Какой вариант лучше? Или, может быть, есть другое решение?

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Для этого вы можете использовать гибкое ограничение скорости .

Позволяет создать промежуточное программное обеспечение koa с опцией keyPrefix для ограничения скорости и использовать тот же клиент Redis koa-redis.

0 голосов
/ 24 декабря 2018

Вариант 3, вероятно, является лучшим вариантом, экземпляр Redis очень легкий, и запуск другого не должен создавать слишком много накладных расходов.

Кроме того, на случай, если вы захотите разделить эти «базы данных» вБудущее или использование другого кластера сделает вашу жизнь проще.

...