gpt4 book ai didi

python - 在 redis 中使用排序集的替代数据模型(对于 Django/Python 项目)

转载 作者:可可西里 更新时间:2023-11-01 11:20:02 27 4
gpt4 key购买 nike

我有一个网络应用程序,用户可以在其中发布文本消息供其他人阅读(有点像 Twitter)。

我需要保存 50 个最新的 message_id 和发帖人的 user_id 对(以备后用)。我使用 redis 后端并意识到我可以将这 50 个最新对保存在一个排序集中:user_id 作为值,message_id 作为分数。

既然 user_id 可以重复,我需要将 NX 标志设置为 true。这个,根据the docs , 确保将新成员添加到排序集中而不是更新现有成员。这很有帮助,因为如果同一用户多次发布消息,新条目将添加到排序集中,而不是覆盖现有条目。这样可以保持数据的完整性。

问题是:我的应用程序使用 python,并且在 Redis 2.8.4(我正在使用的版本)中没有引入 NX 标志。

那么我有什么替代方法可以使用 redis 有效地保存 50 个最新的 message_iduser_id 对?请指教。


将排序集中的 message_iduser_id 切换为 value 和 score 对我不起作用。为什么?因为要确保排序集只保存最新的 50 个条目,所以如果集基数超过 50,我需要 zremrangebyrank。只有当 message_idscore 时才有效,而不是可重复的 user_id。我希望这是有道理的。

最佳答案

首先,我认为您误解了“NX”标志的含义。那是排序的 - 你不能有不同分数的相同值。 “NX”标志仅确保,如果您尝试以不同的分数再次添加值,则它不会修改现有元素的分数。

你需要使用redis列表。您只需要添加以下值:

user_id:score_id(或序列化),

与:http://redis.io/commands/lset

然后使用:http://redis.io/commands/lrange读取最后 50 个元素,

有时使用:http://redis.io/commands/ltrim修剪列表。

关于python - 在 redis 中使用排序集的替代数据模型(对于 Django/Python 项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39532732/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com