node.js - redis string 看起来像一个 hash,获取值

标签 node.js redis express-session

我正在尝试从存储在 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/

相关文章:

node.js - 如何安装 numjs

node.js - Nodejs事件循环,如何正确使用nextTick

ruby-on-rails - Rails Resque 更改 worker 限制?

go - SETEX 错​​误 - "Use of closed network connection"

javascript - 未定义的 var module.exports

php - 编写聊天应用程序

java - 如何序列化Java中的 map 以存储在Redis中?

mysql - 使用 express-mysql-session 验证

node.js - 为什么快速 session cookie 作为第三方 cookie 被阻止

javascript - console.log 不会打印 Node js 中的所有快速 session 属性