2016-01-15 35 views
0

我试图从存储在redis中的node.js访问会话数据。 在Redis的-CLI我跑键*和返回redis字符串看起来像一个散列,得到的值

1) "sess:ZRhBJSVLjbNMc-qJptjiSjp8lQhXGGBb" 
2) "sess:6p1EcGvJukTT26h88NqoTGdz2R4zr_7k" 

如果我再运行得到我的东西拿回来看起来像一个哈希

redis 127.0.0.1:6379> GET sess:ZRhBJSVLjbNMc-qJptjiSjp8lQhXGGBb 
"{cookie:{originalMaxAge:null,expires:null,httpOnly:true,path:/},userKey:a92ca307-b315-44bc-aadf-da838d063c78, 
authenticated:true,clientKey:1ccb5308-2a7e-4f49-bcdf-b2379de44541}" 

如果我试图让在USERKEY使用

hget sess:oq6RW1zP7sfcZZc4wb1RHbti390FxL7- userKey 

返回

ERR Operation against a key holding the wrong kind of value 

所以我跑了一个TYPE检查,发现它不是一个散列,而是一个字符串。我现在有点困惑,因为整个事情看起来像一个哈希,我不知道如何返回我需要的值,因为只是调用get返回整个事情。

是否有一些其他命令我需要用来获取值?

感谢

回答

2

如果你能得到aganist的关键则是不是一个哈希,因为你会得到ERR Operation against a key holding the wrong kind of value。而且这是由自己做HGET并得到错误所证实的。

可能是因为(它是一个散列而不是redis散列数据类型)键看起来像一个散列,它是在客户端的会话cookie中发给用户的唯一标记。当用户在每个请求中将此cookie发送到服务器时,服务器可以使用cookie值作为redis键从redis检索会话信息。

该值是JSON格式的字符串。你必须检索整个值并解析它;使用node.js中的JSON.parse可以完成这项工作。一旦价值被解析你有一个JavaScript对象哪些属性可以是标准方式访问:

var sessionData = JSON.parse(JSONString); 
console.log(sessionData.userKey) 
+0

谢谢,只要我看这是JSON格式的我拍了拍自己的脸的字符串。欢呼花时间给出这样一个完整的答案 – Simon245

1
  1. 这是一个字符串
  2. 不能直接得到一些会议的价值,因为它是系列化一些格式(在这种情况下,JSON)
  3. 如果会话被写入通过node.js,你应该使用相同的API来读取。
  4. 如果会话被其他系统写的,你必须使用节点解析它,你应该得到它,和JSON解析它(JSON.parse)
相关问题