feiyang10086 发表于 2012-02-16 19:13

用Redis存储好友关系-python版

用Redis存储好友关系-python版







这是一个用Redis存储好友关系的python下使用Redis的例子。作者是Eric Florenzano (@ericflo)。相信对各位人生苦短用python的同学是一个好的入门例子。
例子说明:其中虽然用了follow和block等字眼,但是他的关系不是一个微博系统的单向关注,而是类似SNS的双向关系。"""
I've been thinking lately about how perfect Redis would be for storing a
simple social graph. I posited that it would be relatively few lines of code,
and that it'd be clean code too. So here it is: a basic social graph built on Redis.
"""

class FriendGraph(object):

    def __init__(self, ring):
      self.ring = ring

      # These keys are intentionally short, so as to save on memory in redis
      self.FOLLOWS_KEY = 'F'
      self.FOLLOWERS_KEY = 'f'
      self.BLOCKS_KEY = 'B'
      self.BLOCKED_KEY = 'b'

    def follow(self, from_user, to_user):
      forward_key = '%s:%s' % (self.FOLLOWS_KEY, from_user)
      forward = self.ring.sadd(forward_key, to_user)
      reverse_key = '%s:%s' % (self.FOLLOWERS_KEY, to_user)
      reverse = self.ring.sadd(reverse_key, from_user)
      return forward and reverse

    def unfollow(self, from_user, to_user):
      forward_key = '%s:%s' % (self.FOLLOWS_KEY, from_user)
      forward = self.ring.srem(forward_key, to_user)
      reverse_key = '%s:%s' % (self.FOLLOWERS_KEY, to_user)
      reverse = self.ring.srem(reverse_key, from_user)
      return forward and reverse

    def block(self, from_user, to_user):
      forward_key = '%s:%s' % (self.BLOCKS_KEY, from_user)
      forward = self.ring.sadd(forward_key, to_user)
      reverse_key = '%s:%s' % (self.BLOCKED_KEY, to_user)
      reverse = self.ring.sadd(reverse_key, from_user)
      return forward and reverse

    def unblock(self, from_user, to_user):
      forward_key = '%s:%s' % (self.BLOCKS_KEY, from_user)
      forward = self.ring.srem(forward_key, to_user)
      reverse_key = '%s:%s' % (self.BLOCKED_KEY, to_user)
      reverse = self.ring.srem(reverse_key, from_user)
      return forward and reverse

    def get_follows(self, user):
      follows = self.ring.smembers('%s:%s' % (self.FOLLOWS_KEY, user))
      blocked = self.ring.smembers('%s:%s' % (self.BLOCKED_KEY, user))
      return list(follows.difference(blocked))

    def get_followers(self, user):
      followers = self.ring.smembers('%s:%s' % (self.FOLLOWERS_KEY, user))
      blocks = self.ring.smembers('%s:%s' % (self.BLOCKS_KEY, user))
      return list(followers.difference(blocks))

    def get_blocks(self, user):
      return list(self.ring.smembers('%s:%s' % (self.BLOCKS_KEY, user)))

    def get_blocked(self, user):
      return list(self.ring.smembers('%s:%s' % (self.BLOCKED_KEY, user)))

小鬼萌萌控 发表于 2012-02-17 22:38

谢谢分享

unknownmore 发表于 2012-07-12 16:52

没看懂.... :lol
哎...

yezj2004 发表于 2012-08-27 21:43

一楼的位置好啊..

aswrewertry 发表于 2012-09-24 16:59

去年在朋友的介绍下我买了一款【丽塔去痘茶】 我是在乐购时尚网买的,感觉效果很不错。现在我还一直在喝qq 876931865 lcl

页: [1]
查看完整版本: 用Redis存储好友关系-python版