2015-04-02 57 views
0

我在Redis的一些值與此密鑰結構Jedis過濾值hmset

key:1:abc -> votes -> 0 
      -> name -> John 

key:1:xyz -> votes -> 0 
      -> name -> Mary 

key:1:def -> votes -> 1 
      -> name -> Larry 

key:2:ijk -> votes -> 0 
      -> name -> apple 

這就是我的密鑰空間的樣子。我正在使用hmset將這些東西存儲在redis中。 「key:1」是用於識別特定空間中的不同用戶的佔位符,「key:1」之後的部分是「key:1」中每個記錄的唯一區分符。我想寫從Redis的過濾掉數據,讓所有誰擁有的投票數設置爲0,所以的jedis代碼的輸出應該像

key:1:abc -> votes -> 0 
      -> name -> John 

key:1:xyz -> votes -> 0 
      -> name -> Mary 

和拉里被過濾掉的記錄一些代碼。我正在研究hmscan來解決這個問題,但我不確定命令的樣子。任何線索我可以做什麼來獲得輸出?你覺得這次的時間複雜度是多少?

+0

爲什麼不在redis中使用zset進行此排名,其中鍵爲value並且投票爲score?每次用戶投票更改時,您都會更新此zset。 – zenbeni 2015-04-02 14:46:09

回答

1

這有幾個解決方案,但首先想到的是使用輔助結構。只要你願意,你可以做一個SSCAN零數名列表

> SADD zerocount "Larry" 
(integer) 1 
> SADD zerocount "Mary" 
(integer) 1 

(給出:

您添加項目到HASH每一次,你還可以添加名字的人集合到一組您分頁):

> srem zerocount "Larry" 
1 

> sscan zerocount 0 
1) "0" 
2) 1) "Mary" 
2) "Larry" 

在這裏,你會增加拉里的值,例如點,你會從設置中刪除該值10

SADDO(N)爲每個成員添加,在這種情況下O(1)SSCANO(1)爲每個呼叫,SREMO(1)爲我們的場景,一般O(N)其中N是要刪除的成員的數量。

+0

感謝您的解決方案,它工作:) – anonymous123 2015-04-03 06:15:09