You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中Redis-OM能否自定义键名?slug作为键名失败求助

如何用Redis-OM自定义Redis键名(如Person:001格式)

可以实现自定义Redis键名,核心是手动指定实体的id字段,结合Schema的keyPrefix配置(可选)来生成符合要求的键名。以下是具体解决方法:

问题原因

你之前的代码错误地将ID传递给createEntity方法——该方法的参数是实体的属性数据,而非ID。Redis-OM会自动生成ID,因此无法得到自定义键名。

修改后的实现代码

1. 调整Schema配置(可选但推荐)

通过keyPrefix明确指定键的前缀,确保生成的键格式为{前缀}:{自定义ID}:

import { Entity, Schema } from "redis-om";
import client from "../redis.js";

class Person extends Entity {}
export const personSchema = new Schema(
  Person,
  {
    firstName: { type: "string" },
    lastName: { type: "string" },
    age: { type: "number" },
    verified: { type: "boolean" },
  },
  {
    dataStructure: "JSON",
    keyPrefix: "Person" // 指定键前缀,最终键为Person:{id}
  }
);
export const personRepository = client.fetchRepository(personSchema);

// 应用启动时初始化索引(仅需执行一次)
await personRepository.createIndex();

2. 控制器中正确设置自定义ID

创建实体后手动设置id字段为你的slug值,再执行保存操作:

import expressAsyncHandler from "express-async-handler";
import { personRepository } from "../models/personModel.js";

export const creatingPerson = expressAsyncHandler(async (req, res) => {
  // 创建实体并赋值请求中的属性
  const person = personRepository.createEntity(req.body);
  // 设置自定义ID(即你的slug,比如从req.params.id获取)
  person.id = req.params.id;
  // 保存实体到Redis
  const savedPerson = await personRepository.save(person);

  res.status(200).json({ savedPerson });
});

验证效果

保存后通过Redis CLI执行KEYS Person:*,即可看到类似Person:001的自定义键名。

注意事项

  • 自定义ID必须保证唯一性,否则会覆盖Redis中已存在的同键实体。
  • 若不配置keyPrefix,Redis-OM默认会使用实体类名称(如Person)作为前缀,同样能生成Person:{id}格式的键名,可根据需求选择是否配置。

内容的提问来源于stack exchange,提问作者KzQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:36:22