【问题标题】:redis string looks like a hash, getting the valueredis字符串看起来像一个哈希,获取值
【发布时间】:2016-01-15 15:16:40
【问题描述】:

我正在尝试从存储在 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 会返回整个事情。

我需要使用其他命令来获取值吗?

谢谢

【问题讨论】:

    标签: node.js redis express-session


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我一看到它是一个 json 格式的字符串,我就打了自己一巴掌。为花时间给出如此完整的答案而欢呼
    【解决方案2】:
    1. 这是一个字符串
    2. 您无法直接获取某些会话值,因为它已序列化为某种格式(在本例中为 JSON)
    3. 如果会话是由node.js编写的,你应该使用相同的API来读取。
    4. 如果session是其他系统写的,必须用node解析,直接GET,json解析(JSON.parse)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-28
      • 2023-03-16
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 2013-08-28
      • 1970-01-01
      相关资源
      最近更新 更多