redis字符串看起来像一个哈希值,获取值

时间:2016-01-15 06:42:39

标签: node.js redis express-session

我正在尝试从存储在redis中的node.js访问会话数据。 在redis-cli中,我运行了Keys *并返回

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

如果我然后运行GET,我会回来看起来像哈希

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 个答案:

答案 0 :(得分:2)

如果你可以GET 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)

答案 1 :(得分:1)

  1. 这是一个字符串
  2. 您无法直接获得某个会话值,因为它序列化为某种格式(在本例中为JSON)
  3. 如果会话是由node.js编写的,则应使用相同的API进行读取。
  4. 如果会话是由其他系统编写的,你必须用节点解析它,你应该只需要它,然后json解析它(JSON.parse)