2016-01-15 69 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)
相關問題