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
相关产品推荐
相关产品推荐

