我正在尝试从存储在 redis 中的 node.js 访问 session 数据。 在 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 会返回整个事情。
我需要使用其他命令来获取值吗?
谢谢
最佳答案
如果您可以 GET aganist 键那么它不是哈希,因为您将得到 ERR Operation against a key holding a wrong kind of value
。并且您自己在执行 HGET 并收到错误时确认了这一点。
可能那个键看起来像一个散列,因为(它是一个散列但不是 redis 散列数据类型)它是在客户端的 session cookie 中发给用户的唯一 token 。当用户在每个请求中将此 cookie 发送到服务器时,服务器可以使用 cookie 值作为 redis 键从 redis 检索 session 信息。
值为JSON格式的字符串。您必须检索整个值并解析它;使用JSON.parse在 node.js 中可以完成这项工作。解析值后,您将拥有一个 JavaScript 对象,可以通过标准方式访问其属性:
var sessionData = JSON.parse(JSONString);
console.log(sessionData.userKey)
关于node.js - redis string 看起来像一个 hash,获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34805599/