2014-04-25 97 views
1

說我有一個命名空間的關鍵user + id添加Redis過期到一大堆名稱空間的密鑰?

  • lastMessages
  • isNice屬性

所以 - 它是這樣的:

>lpush user:111:lastMessages a 
>lpush user:111:lastMessages b 
>lpush user:111:lastMessages c 

確定

讓我們添加isNice道具:

>set user:111:isNice 1

這樣:讓我們看看所有的鍵爲111

> keys user:111*

結果:

1) "user:111:isNice" 
2) "user:111:lastMessages" 

好吧,

我想expire命名空間條目在它的整個! (所以當超時 - 全部鑰匙應該一次走。我不想開始管理每個命名空間的鑰匙和時間,因爲並非所有道具都是同時添加的 - 但我希望所有道具都死在同一個時間......)

問:

這是否意味着我必須設置到期每個命名空間鍵輸入?

如果沒有,那麼做到底是什麼方法?

+1

您的問題的常見解決方案是使用[哈希](http://redis.io/commands/hset)而不是命名空間鍵。但哈希不支持列表,所以它不適合你。 –

回答

1

是的,你設置它的方式,這些都只是單獨的鍵。您可以將名稱空間視爲您與所有可訪問Redis商店的用戶的理解

好的傢伙,這是交易。我們都將使用看起來像這樣的密鑰:

user:{user_id}:lastMessages 

這樣,我們都知道在哪裏查看以獲取用戶號碼325的最後消息。

但實際上,user:111:lastMessagesuser:111:isNice之間沒有共享。

的修復

的一種方式你所描述的是使用哈希你可以做什麼。您將創建一個密鑰爲user:111的散列,然後添加字段lastMessagesisNice

> hset user:111 lastMessages "you are my friend!" 
> hset user:111 isNice true 
> expire user:111 1000 

或者一次性全部

> hmset user:111 lastMessages "you are my friend!" isNice true 
> expire user:111 1000 

這裏是一個page describing redis' data types。向下滾動到它所說的「哈希」以獲取更多信息。

編輯

啊,我沒有你使用的是列表注意。

如果沒有太多的消息(20歲以下),可以將它們序列化爲JSON並將它們存儲爲一個字符串。雖然這不是一個很好的解決方案。

最簡潔的方式可能只是設置兩個過期。

+0

last Messages(!) - plural ..... so? –