基本上我正在尝试设置一个具有给定值的对象,但即使看起来成功,我也无法让它工作.这是我的javascript对象;
function student(){
var newStudent = {};
newStudent.lessons = [1,3,4];
return newStudent;
}
Run Code Online (Sandbox Code Playgroud)
稍后,当我想获取学生列表时,我失败了,因为console.log打印"undefined"但是该对象不为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);
});
Run Code Online (Sandbox Code Playgroud)
两个问题;
首先,我该如何正确地完成它,或者Redis中不支持Javascript的列表结构.其次,如果我想用studentKey1获取项目并在项目列表的后面插入一个项目,我该怎样才能完成(如何利用RPUSH)?
如果您只想保存整个Javascript对象,则需要先将其转换为字符串,因为Redis只接受字符串值.
client.set('studentKey1', JSON.stringify(student), redis.print);
Run Code Online (Sandbox Code Playgroud)
将来,如果您的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);
}
Run Code Online (Sandbox Code Playgroud)
要使用RPUSH,如果学生中有其他数据而不仅仅是要存储的列表,则需要将学生分成多个键.基本上,列表必须存储在自己的密钥中.这通常通过将列表名称附加到它所属的对象键的末尾来完成.
我已经使用了multi操作语法,因此学生可以一次性添加到缓存中.请注意,如果密钥尚不存在,将为您创建密钥.
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); });
Run Code Online (Sandbox Code Playgroud)
然后在最后添加一个新项目,您将执行以下操作.这会将新项目推送到列表的末尾.在将新值推送到列表末尾之前无需获取项目.
client.rpush('studentKey1:lessons', JSON.stringify(newItem));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2255 次 |
| 最近记录: |