这个zincrby语句到底在做什么?

s8vozzvw  于 2021-06-10  发布在  Redis
关注(0)|答案(1)|浏览(393)

我正在读乔西亚·卡尔森的《雷迪斯在行动》。
在第二章有这样的代码:

conn.zadd('viewed:' + token, {item: timestamp})
conn.zremrangebyrank('viewed:' + token, 0, -26)
conn.zincrby('viewed:', -1, item)        # What is this line doing ?

我只是不明白这句话想说什么:

conn.zincrby('viewed:', -1, item)

它似乎正在创建一个名为 -1 在名为 viewed: 并按中指定的值递增 item . 假设 item 是数字的。我不知道你为什么要这么做。
github的代码链接在这里。
根据redis py中的定义。
我的直觉正确吗?

nwnhqdif

nwnhqdif1#

我为每个命令添加了解释,问题的答案在最后。
它将一个新项目(或更新分数)添加到指定的排序集score as timestamp。 item 将转到排序集末尾的,因为时间戳是当前的。这个 rank 此元素的值将是最高的,因为它位于得分最高的列表末尾(timestamp)。

conn.zadd('viewed:' + token, {item: timestamp})

它从排序集中删除旧项,只保留最近的25项。最新增加的 item 如果排序集的大小大于25,则不会删除。

conn.zremrangebyrank('viewed:' + token, 0, -26)

还有另一个排序集(名为 viewed: )跟踪所有项目及其相应的视图计数。前两个命令是特定于用户(令牌)的。此命令将元素的视图计数递减(1)。

conn.zincrby('viewed:', -1, item)

如果将数据建模为,则将每个项放入一个具有默认分数(比如1000)的排序集,并在每次查看时将其递减。之后,你可能会得到最新的产品与他们的最低分数(您可以通过增加all来实现它,并得到排序结果的倒数)

相关问题