`
liuxinglanyue
  • 浏览: 564753 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

用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)))
 来自:http://blog.nosqlfan.com/html/576.html
分享到:
评论

相关推荐

    Redis-x64-2.8.2400

    - **社交网络**:存储用户的关注、好友关系等。 - **分布式锁**:在分布式系统中,Redis可以作为实现锁的工具。 综上所述,`Redis-x64-2.8.2400` 是一个强大的键值存储系统,适用于多种应用场景,通过合理配置和...

    Redis-x64-3.2.100.zip

    - **社交网络**:集合和有序集合用于关注者、好友列表等社交关系的管理。 4. **Redis-x64-3.2.100的安装与配置**: - 解压缩下载的`Redis-x64-3.2.100.zip`文件,将解压后的目录放置在适当位置。 - 配置`redis....

    Redis Cookbook.pdf

    - **数据结构服务:** Redis提供了丰富的数据结构(如字符串、哈希表、集合、有序集合等),适用于实现排行榜、好友关系链等多种业务需求。 2. **安装Redis** - **问题背景:** 对于初学者来说,正确安装Redis是...

    Python-rgpRGP在Redis基础上提供了简单的向量图数据库

    **Python-rgpRGP:Redis上的向量图数据库** `Python-rgpRGP` 是一个基于 Redis 的扩展库,它为用户提供了构建简单向量图数据库的能力。这个库的核心理念是利用 Redis 的高效存储和检索特性,来支持图数据结构的操作...

    Redis实战.pdf

    - **社交网络:** 如Facebook等社交媒体平台利用Redis来存储用户会话、好友列表等信息。 - **实时分析:** 如实时统计分析、排行榜等场景。 - **消息队列:** Redis可以通过列表数据结构实现高效的消息队列服务。...

    redis工具包

    - **社交网络应用**:如好友关系的维护等。 #### 二、Redis工具包概述 根据提供的信息,“redis工具包网盘链接”似乎是指一个包含了一系列与Redis相关的工具和资源的包。虽然没有具体的信息关于这个工具包的内容,...

    java操作redis

    - `Hash`(哈希类型):用于存储字段和值的映射关系,可以看作是具有唯一键的 Map 结构,适用于存储对象等。 - **原子性操作**:所有数据类型的 API 都支持原子性操作,这意味着在执行操作时不会被其他操作打断,...

    Python-StreamFramework使用Cassandra和Redis创建动态消息和通知系统

    这个框架利用了NoSQL数据库Cassandra和内存数据结构存储Redis的强大功能,以实现高性能、高可用性和可伸缩性。在Python开发领域,Stream Framework提供了一个优雅的方式去处理用户活动流、时间线和其他实时数据。 ...

    Redis 学习教程1

    Python 客户端的实现可以使用redis-py库。 ### Redis 分布式锁实现 Redis 的分布式锁实现可以用来实现分布式系统中的锁机制。Redis 的分布式锁实现可以使用SETNX命令来实现锁机制。 ### 总结 本文档总结了Redis...

    使用redis构建简单的社交网站

    - **会话管理**:通过Redis存储用户的会话信息,包括登录状态和相关的安全设置。会话数据通常设置有过期时间,以确保用户在一段时间不活动后自动登出。 #### 三、用户资料存储 - **Redis哈希结构**:用户资料可以...

    Redis特性和应用场景.doc

    Redis,全名Redisson,是一款高性能的Key-Value数据存储系统,因其高效的数据处理能力和丰富的数据结构而广泛应用于各种场景。以下将详细介绍Redis的主要特性、数据结构以及适合的应用场景。 1. Redis特性: - **...

    使用redis构建简单的社交网站aper-m开发笔记

    在构建一个简单的社交网站时,Redis作为一个高性能的键值存储系统,经常被用来处理大量实时数据,如用户状态、消息推送、好友关系等。本文将深入探讨如何利用Redis的优势来搭建这样的平台,主要关注以下几个关键知识...

    Python-relationshipsredis为后端用简单形式来描述用户关系

    本文将深入探讨如何使用Python语言,结合redis数据库作为后端,以简洁高效的方式处理用户之间的关系。"relationships-redis"项目正是为此目的设计的,它提供了一种简单的方式来描述和管理用户之间的复杂联系。 首先...

    redis实战中文版

    - **社交网络**:记录用户之间的关系,如好友列表等。 #### 三、初识Redis 1. **数据类型**:包括字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets),这些数据类型为Redis提供了...

    尚硅谷redis视频教程更新

    6. **社交网络应用**:Redis的数据结构非常适合处理社交网络中的好友关系、粉丝关注等功能。 ### 尚硅谷Redis视频教程可能包含的内容 1. **Redis基础概念介绍**:包括Redis的历史背景、特点、优势以及应用场景等。...

Global site tag (gtag.js) - Google Analytics