我有一个网络应用程序,用户发布短信供其他人阅读(类似Twitter)。
我需要保存50个最新的message_id
和海报的user_id
对(稍后进行处理)。我使用redis后端并意识到我可以在排序集中保存这50个最新对:user_id
作为值,message_id
作为分数。
现在可以重复user_id
,我需要将NX
标记设置为true
。根据{{3}},这可以确保将新成员添加到已排序的集合中,而不是更新现有成员。这有帮助,因为如果同一用户多次发布消息,则新条目将添加到已排序集,而不是覆盖现有消息。这使数据保持清醒。
问题在于:我的应用程序使用python,并且在redis 2.8.4(版本I' m using)中引入了NX标志。
那么我有什么选择可以使用redis有效地保存50个最新的message_id
和user_id
对?请指教。
在排序集中切换message_id
和user_id
作为值和分数对我不起作用。为什么?因为要确保排序集只保存最新的50个条目,所以如果设置的基数超过50,我需要zremrangebyrank
。仅当message_id
是score
而不是可重复时才有效user_id
。我希望这是有道理的。
答案 0 :(得分:1)
首先,我认为你误解了" NX"国旗的意思。这是排序的集 - 您可以使用不同的分数来获得相同的值。 " NX" flag仅确保,如果您尝试使用不同的分数再次添加值,则不会修改现有元素的分数。
您需要使用redis列表。您只需添加以下值:
user_id:score_id(或序列化),
with:http://redis.io/commands/lset
然后使用:http://redis.io/commands/lrange读取最后50个元素,
有时使用:http://redis.io/commands/ltrim来修剪列表。