我有一个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键值存储区,并生成排行榜。有一个superawesome redis库用于实现排行榜:https://github.com/agoragames/leaderboard-python
所以我的问题是,鉴于我的redis服务器正在运行,请说XXX.XXX.XX.XX:6342
如何将我的python / django应用程序连接到redis服务器,并更新KV存储,一旦有一些数字,我如何获取视图并显示?
答案 0 :(得分: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库的自述文件非常好,应该包含构建它所需的所有示例。
答案 1 :(得分:0)
对于未来的googlers,告诉Leaderboard如何连接到redis服务器的方法是在Leaderboard构造函数中指定更多参数:
reputation_lb =排行榜('声誉',主机=“xyz.com”,port =“1234”)
有关支持哪些选项的更多详细信息,请参阅排行榜的构造函数代码:http://pydoc.net/Python/leaderboard/2.8.0/leaderboard/