2

我有一个 Django 应用程序。该应用程序是一个正常的应用程序。对我来说一切都很好。

我想从现在开始实施排行榜。阅读几个 redis 有助于做到这一点的地方。而且真的很棒。所以我在服务器上安装并配置了redis。

对我来说,用户配置文件的最小表示是:

class UserProfile(models.Model):

    user = models.OneToOneField(User)
    invited_friends = models.BooleanField(default=False)
    filled_wishlist = models.BooleanField(default=False)
    upvote = models.IntegerField()
    downvote = models.IntegerField()

    @property
    def reputation(self):
        return int(confidence_fixed(self.upvote, self.downvote)*100)

基于这个信誉属性,我得到一个值。所有这些都发生在 PostgreSQL 数据库后端。

现在我要做的是,把这些分数,放到redis键值存储中,生成一个排行榜。有一个超级棒的redis库来实现排行榜:https ://github.com/agoragames/leaderboard-python

所以我的问题是,鉴于我的 redis 服务器正在运行,比如XXX.XXX.XX.XX:6342 如何将我的 python/django 应用程序连接到 redis 服务器,并更新 KV 存储,一旦有一些数字,我如何在视图中获取并显示?

4

2 回答 2

1

我认为您使用 leaderboard-python 库走在正确的轨道上。

首先,您需要编写一个一次性脚本,使用 leaderboard-python 将数据从模型移动到 redis。

# Create a new leaderboard
reputation_lb = Leaderboard('reputation')

for profile in UserProfile.objects.all():
     reputation.rank_member('user_%i' % profile.user.pk, profile.reputation)

您还需要在 UserProfile 模型上创建另一个属性,以从 leaderboard-python 检索信誉。

然后你很可能想要更新分数,或者你复制数据库中的信息并继续使用你的信誉属性来更新排行榜,或者你只是增加/减少存储在 redis 中的分数。

leaderboard-python 库的自述文件非常好,应该包含构建它所需的所有示例。

于 2013-05-14T16:36:07.077 回答
0

对于未来的 googlers,告诉 Leaderboard 如何连接到你的 redis 服务器的方法是在 Leaderboard 构造函数中指定更多参数:

声誉_lb = 排行榜('声誉',主机=“xyz.com”,端口=“1234”)

有关支持哪些选项的更多详细信息可以在此处的排行榜的构造函数代码中找到:http: //pydoc.net/Python/leaderboard/2.8.0/leaderboard/

于 2014-08-02T09:11:39.867 回答