gpt4 book ai didi

javascript - Redis:使用列表保存 Javascript 对象

转载 作者:IT王子 更新时间:2023-10-29 06:08:44 25 4
gpt4 key购买 nike

基本上我正在尝试设置一个具有给定值的对象,但我无法让它工作,即使它看起来很成功。这是我的 javascript 对象;

function student(){
var newStudent = {};
newStudent.lessons = [1,3,4];

return newStudent;
}

稍后,当我想要获取学生列表时,我失败了,因为 console.log 打印了 "undefined",但是对象是 not null。我的插入redis的代码;

var student = Students.student();
//Object is not null I checked it
client.set("studentKey1", student, redis.print);
client.get("studentKey1", function(err, reply){
console.log(reply.lessons);
});

两个问题;

首先,请问如何正确操作或者Redis不支持Javascript的列表结构。其次,如果我想使用 studentKey1 获取项目并将项目插入到列表的后面,我该如何实现(我如何使用 RPUSH)?

最佳答案

如果您只想保存整个 Javascript 对象,您需要先将其转换为字符串,因为 Redis 只接受字符串值。

client.set('studentKey1', JSON.stringify(student), redis.print);

将来,如果您的 student 对象具有函数,请记住这些函数不会被序列化并存储在缓存中。从缓存中获取对象后,您需要对其进行再水合。

client.get('studentKey1', function (err, results) {
if (err) {
return console.log(err);
}

// this is just an example, you would need to create the init function
// that takes student data and populates a new Student object correctly
var student = new Student().init(results);
console.log(student);
}

要使用 RPUSH,如果除了要存储的列表之外,学生中还有其他数据,则需要将学生分成多个键。基本上,列表必须存储在它自己的 key 中。这通常是通过将列表名称附加到它所属的对象键的末尾来完成的。

我使用了multi 操作语法,所以学生被一次性添加到缓存中。请注意,如果 key 尚不存在,将为您创建。

var multi = client.multi().set('studentKey1', 'store any string data');
student.lessons.forEach(function(l) {
multi.rpush('studentKey1:lessons', l);
});
multi.exec(function (err) { if (err) console.log(err); });

然后要在末尾添加一个新项目,您可以执行如下操作。这会将一个新项目推到列表的末尾。在将新值推到列表末尾之前无需获取该项目。

client.rpush('studentKey1:lessons', JSON.stringify(newItem));

关于javascript - Redis:使用列表保存 Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12748305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com