2014-05-24 43 views
0

我要存儲和「選擇」在Redis的陣列,Predis,我輸入的數據如下:查詢陣列中的Redis與Predis

$redis->hset("account_id_".$account_id, "access_time", time()); 

所以我一直保存在Redis的這種結構

db0 
    account_id_1 
     access_time: 1400901850 
     ... 
     other values 
    account_id_2 
     access_time: 1400901862 
     ... 
     other values 
    ... 
    other_accounts 

我想選擇一系列unix時間戳中的所有帳戶,但目前爲止還沒有找到方法,但我不確定數據結構是否適用於此目的。

回答

2

我不確定數據結構是否適合於此目的。

您使用散列是罰款用於存儲賬戶數據,但你需要使用另一種數據結構,如果你想比對access_time場O(N)查找更好。也就是說,你應該使用一個有序集合。

您應該在數據庫中有一個名爲account:access_time的附加密鑰,其類型爲sorted set。當一個帳戶訪問,以下Redis的命令應該運行(與填寫,當然相應的變量):

ZADD account:access_time $access_time $account_id 

後來,當你要根據訪問時間進行查找上,運行以下命令:

ZRANGEBYSCORE account:access_time $min_access_time $max_access_time 

上述命令將返回一個您可以繼續工作的帳戶ID列表。

+0

非常感謝蒂姆,這正是我一直在尋找的 – Mike