2014-02-18 44 views
3

我嘗試使用redis排序的set命令zadd。但是當我運行這個腳本時保持拋出錯誤:node redis zadd key error

var ts = Math.round(Date.now()/1000) 
     , key = 'usr::' + dest.ID + '::msgs' 
     , id = uuid.v1(); 
var notify = { 
    msg: response.msg, 
    from: response.from ? response.from : null, 
    type: response.type ? response.type : null, 
    date: ts, 
    read: 0 
} 
client.zadd(key, ts, JSON.stringify(notify), function (err, response) { 
    if (err) throw err; 
}); 

這段代碼有什麼問題嗎?

順便說:我試圖做到的是通知/收件箱系統......所以更好地問我喜歡你將有助於節省時間,最後你不:(

ERROR: ERR行動,打擊的關鍵抱着一種錯誤的價值

回答

2

我要說的重點已經存在於Redis的,而不是一個有序集合。嘗試看看是否你已經在Redis的USR :: ID ::封郵件條目,檢查其類型

更新:

如果您只保留一個有序集合,實際上不可能更新條目,因爲條目數據被序列化並用作有序集合項目的值。

您有幾種解決方案,但:

1)您可以讀取和刪除的項,反序列化,改讀狀態,再次序列,在排序重新設置添加的項目。如果需要,可以通過使用服務器端Lua腳本進行一次往返。

2)您可以在多個對象分割你的數據模型:保持一個有序集合關聯的時間戳和郵件ID,並使用每個消息ID一個哈希對象存儲每個消息的屬性。因此更新消息的讀取狀態很容易(HMSET)。 3)你也可以有兩個排序集(一個用於讀取消息,一個用於未讀消息)。改變消息的狀態將涉及從一個集合中刪除該項目,並將其添加到另一個集合中。

該解決方案的最佳選擇可能取決於您的數據訪問模式。

+0

thx爲您的答案。你明白了,我最近將我的代碼從列表更改爲有序集。但是由於我找不到更新現場的方法,我選擇了這種方法。 –

+0

可以給我如何更新從讀(0)閱讀(1)使用有序集合notification.read閱讀狀態 –

+1

看到我更新... –