这是一个用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可以作为实现锁的工具。 综上所述,`Redis-x64-2.8.2400` 是一个强大的键值存储系统,适用于多种应用场景,通过合理配置和...
- **社交网络**:集合和有序集合用于关注者、好友列表等社交关系的管理。 4. **Redis-x64-3.2.100的安装与配置**: - 解压缩下载的`Redis-x64-3.2.100.zip`文件,将解压后的目录放置在适当位置。 - 配置`redis....
- **数据结构服务:** Redis提供了丰富的数据结构(如字符串、哈希表、集合、有序集合等),适用于实现排行榜、好友关系链等多种业务需求。 2. **安装Redis** - **问题背景:** 对于初学者来说,正确安装Redis是...
**Python-rgpRGP:Redis上的向量图数据库** `Python-rgpRGP` 是一个基于 Redis 的扩展库,它为用户提供了构建简单向量图数据库的能力。这个库的核心理念是利用 Redis 的高效存储和检索特性,来支持图数据结构的操作...
- **社交网络:** 如Facebook等社交媒体平台利用Redis来存储用户会话、好友列表等信息。 - **实时分析:** 如实时统计分析、排行榜等场景。 - **消息队列:** Redis可以通过列表数据结构实现高效的消息队列服务。...
- **社交网络应用**:如好友关系的维护等。 #### 二、Redis工具包概述 根据提供的信息,“redis工具包网盘链接”似乎是指一个包含了一系列与Redis相关的工具和资源的包。虽然没有具体的信息关于这个工具包的内容,...
- `Hash`(哈希类型):用于存储字段和值的映射关系,可以看作是具有唯一键的 Map 结构,适用于存储对象等。 - **原子性操作**:所有数据类型的 API 都支持原子性操作,这意味着在执行操作时不会被其他操作打断,...
这个框架利用了NoSQL数据库Cassandra和内存数据结构存储Redis的强大功能,以实现高性能、高可用性和可伸缩性。在Python开发领域,Stream Framework提供了一个优雅的方式去处理用户活动流、时间线和其他实时数据。 ...
Python 客户端的实现可以使用redis-py库。 ### Redis 分布式锁实现 Redis 的分布式锁实现可以用来实现分布式系统中的锁机制。Redis 的分布式锁实现可以使用SETNX命令来实现锁机制。 ### 总结 本文档总结了Redis...
- **会话管理**:通过Redis存储用户的会话信息,包括登录状态和相关的安全设置。会话数据通常设置有过期时间,以确保用户在一段时间不活动后自动登出。 #### 三、用户资料存储 - **Redis哈希结构**:用户资料可以...
Redis,全名Redisson,是一款高性能的Key-Value数据存储系统,因其高效的数据处理能力和丰富的数据结构而广泛应用于各种场景。以下将详细介绍Redis的主要特性、数据结构以及适合的应用场景。 1. Redis特性: - **...
在构建一个简单的社交网站时,Redis作为一个高性能的键值存储系统,经常被用来处理大量实时数据,如用户状态、消息推送、好友关系等。本文将深入探讨如何利用Redis的优势来搭建这样的平台,主要关注以下几个关键知识...
本文将深入探讨如何使用Python语言,结合redis数据库作为后端,以简洁高效的方式处理用户之间的关系。"relationships-redis"项目正是为此目的设计的,它提供了一种简单的方式来描述和管理用户之间的复杂联系。 首先...
- **社交网络**:记录用户之间的关系,如好友列表等。 #### 三、初识Redis 1. **数据类型**:包括字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets),这些数据类型为Redis提供了...
6. **社交网络应用**:Redis的数据结构非常适合处理社交网络中的好友关系、粉丝关注等功能。 ### 尚硅谷Redis视频教程可能包含的内容 1. **Redis基础概念介绍**:包括Redis的历史背景、特点、优势以及应用场景等。...