免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7353 | 回复: 4

[Redis] 用Redis存储好友关系-python版 [复制链接]

论坛徽章:
0
发表于 2012-02-16 19:13 |显示全部楼层
用Redis存储好友关系-python版








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

  6. class FriendGraph(object):

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

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

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

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

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

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

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

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

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

  48.     def get_blocked(self, user):
  49.         return list(self.ring.smembers('%s:%s' % (self.BLOCKED_KEY, user)))
复制代码

论坛徽章:
0
发表于 2012-02-17 22:38 |显示全部楼层
谢谢分享

论坛徽章:
0
发表于 2012-07-12 16:52 |显示全部楼层
没看懂....
哎...

论坛徽章:
0
发表于 2012-08-27 21:43 |显示全部楼层
一楼的位置好啊..

论坛徽章:
0
发表于 2012-09-24 16:59 |显示全部楼层
去年在朋友的介绍下我买了一款【丽塔去痘茶】 我是在乐购时尚网买的,感觉效果很不错。现在我还一直在喝qq 876931865 lcl

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP