Redis内部如何分离数据?
How to separate data inside Redis?
我想一起使用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 中将它们分开。
我有三种方法可以做到:
- 前缀。 Node.js 的 Redis 客户端提供了为所有使用的键添加前缀的能力。 (https://github.com/NodeRedis/node_redis#rediscreateclient)问题:它看起来像是一个解决方法。
- 数据库。 Redis 服务器提供逻辑数据库。 (https://redis.io/commands/select)问题:Redis CLUSTER只支持一个逻辑数据库。
- 分离的 Redis 实例。我可以 运行 将不同端口上的 Redis 实例分开。 问题: 增加了大量管理开销。
哪个选项更好?
或者也许还有其他解决方案?
选项 3 可能是最佳选项,Redis 实例非常轻量级,启动另一个实例不会产生太多开销。
此外,如果您以后想要将这些 "databases" 分开或部署不同的集群,这将使您的生活更轻松。
您可以使用 rate-limiter-flexible。
它允许创建带有 keyPrefix
速率限制选项的 koa 中间件,并使用相同的 Redis 客户端 koa-redis
。
我想一起使用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 中将它们分开。 我有三种方法可以做到:
- 前缀。 Node.js 的 Redis 客户端提供了为所有使用的键添加前缀的能力。 (https://github.com/NodeRedis/node_redis#rediscreateclient)问题:它看起来像是一个解决方法。
- 数据库。 Redis 服务器提供逻辑数据库。 (https://redis.io/commands/select)问题:Redis CLUSTER只支持一个逻辑数据库。
- 分离的 Redis 实例。我可以 运行 将不同端口上的 Redis 实例分开。 问题: 增加了大量管理开销。
哪个选项更好? 或者也许还有其他解决方案?
选项 3 可能是最佳选项,Redis 实例非常轻量级,启动另一个实例不会产生太多开销。
此外,如果您以后想要将这些 "databases" 分开或部署不同的集群,这将使您的生活更轻松。
您可以使用 rate-limiter-flexible。
它允许创建带有 keyPrefix
速率限制选项的 koa 中间件,并使用相同的 Redis 客户端 koa-redis
。