1

我正在开发使用 redis 保存中间数据的小型应用程序。插入数据后,我需要按照插入的顺序重新加载数据。

我正在使用keys方法来获取所有键,但返回键的顺序与插入时不同。

4

2 回答 2

2

您必须自己维护秩序,为插入的键保留一个单独的列表。所以,而不是

SET foo, bar

你可以这样做:

SET foo, bar
RPUSH insert_order, foo

然后你可以做

LRANGE insert_order, 0, 100

获得前 100 个集合字段。

例如,如果您想跟踪实际插入(而不是更新),您可以使用 SETNX。此外,您可以使用排序集而不是列表(如@Leonid 所述)此外,您可以将整个事物包装在 Lua 中,以便对客户端代码隐藏簿记。

于 2013-10-14T10:23:06.430 回答
1

对于索引 URL 并按插入顺序获取列表,您应该使用排序集:

zadd <your_url_list_key> <inserted_time> <url>

单个 url 的详细数据应存储在不同的位置。例如,使用哈希:

hset <your_url_data_key> <url> <url_data>

最好不要在redis上存储detail data,所以不要使用redis hash,应该把url detail data保存在mysql上。

您也可以md5(url)在索引之前减小大小(然后完整的 url 值将存储在 url_data 中)。

在我的项目中,排序集仍然可以处理大约 300 万条记录(经常读写)。但是你应该经常观察哈希大小,它会增长得非常快。

于 2013-10-15T03:26:03.793 回答