2012-03-31 55 views
1

我有一个使用频繁更新列表的应用程序。例如,每个点击一个按钮的人都被添加到与该按钮关联的唯一列表中。然后,我们要通过按钮以降序和限制的方式显示这些列表。从Redis到MongoDB的数据存储持久数据

我们一直在使用MySQL和Memcache来做这件事。问题是这不能很好地工作。

我打算做的是使用Redis列表。每个按钮将持有redis的唯一密钥,每个用户都将被添加到使用LPUSH如果我们想获得最新的10键,我们可以使用LRANGE 0 10

现在,最终这些按钮将“过期”,不再是积极添加或点击,但是,我们需要历史数据。这个想法一旦到期,我们将从Redis获取数据并将其填充到MongoDB。对历史数据的任何查询都将针对MongoDB。

有人会提出这个解决方案吗?这样做是否“有意义”?

谢谢!

回答

2

这个解决方案很有意义,我在我的应用程序中做了类似的事情。

有一点要注意,虽然:

因此,例如,每一个点击按钮的人,被添加到关联到该按钮唯一列表。

是否允许该列表中的重复用户?如果是,请使用列表。如果没有,你可能想要将它与set(用于独特的检查)相结合,但它会花费你一些RAM。

+0

您可能想要进一步向OP解释的关键点是如何在Redis到期时将项目从Redis传输到MongoDB。 Redis中的项目到期时无法直接通知。 – 2012-04-01 09:55:06

+0

@DidierSpezia:请注意在问题中引用了“过期”。这提示(对我来说)是应用程序决定何时项目已过期。它现在也可以将数据传输给mongo。 – 2012-04-01 09:59:05

+0

非常感谢!是的,到期将由应用程序处理,一旦按钮到期,应用程序将知道这一点,并将数据从redis复制到mongo,然后从redis中删除。列表也可以有重复的用户,所以列表应该很好。 – dzm 2012-04-02 13:58:11