使用Predis查询Redis中的数组


Querying arrays in Redis with Predis

我想用Predis在Redis中存储和"SELECT"数组,我输入的数据如下:

$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时间戳范围内的所有帐户,但到目前为止我还没有找到方法,我怀疑数据结构是否正确用于此目的。

我不确定这个数据结构是否正确。

使用散列存储帐户数据是可以的,但是如果您希望在access_time字段上进行比O(N)更好的查找,则需要使用另一种数据结构。也就是说,您应该使用排序集。

您应该在数据库中有一个名为account:access_time的类型为排序集的附加键。当一个帐户被访问时,应该运行以下redis命令(当然,要填写适当的变量):

ZADD account:access_time $access_time $account_id

稍后,当您希望根据访问时间进行查找时,运行以下命令:

ZRANGEBYSCORE account:access_time $min_access_time $max_access_time

上面的命令将返回一个帐户id列表,然后您可以对其进行操作。