首页 » Redis » Redis学习05之 SET集合

Redis学习05之 SET集合

集合SETs和Sorted SETs有序集合都是集合操作基本一样,只是差别后者数据是有序的,前者无序。集合是Redis的基本数据结构之一,集合中同样和列表一下也可以存放很多数据,列表是左右顺序可以存储重复数据的结构,集合是无充存放且不存在重复数据,有序集合它保留了集合不能重复元素的特性.但不同的是,有序集合是可排序的.但是他和列表使用索引下标进行排序依据不同的是,它给每个元素设置一个分数(score)作为排序的依据.

数据结构 允许重复 支持顺序 顺序实现方式 应用场景
列表 索引下标 队列、抢购、时间顺序
集合 标签、去重,社交圈
有序集合 分值 排行榜、积分

集合的命令有10条,有序集合有20几条,下面只是简单的使用。
操作
SADD 增加一个或多个member
SREM 删除member

获取
SPOP 获取并删除
SMEMBERS 获取所有
SISMEMBER 获取指定member

集合
SINTER 集合交集
SUNION 集合并集
SDIFF 集合差集,前比后多
统计
SCARD 统计多少member

集合案例

import redis

client = redis.Redis(host='127.0.0.1')
classes = ['English','Chinese','Match','Computer']

def get_students():
    students = client.sunion(*classes)
    return len(students)

def get_stu_intersection(class_a, class_b):
    students = client.sinter(class_a, class_b)
    return len(students)

def get_stu_diff(class_a, class_b):
    students = client.sdiff(class_a, class_b)
    return len(students)

def get_stu_union(class_a, class_b):
    students = client.sunion(class_a, class_b)
    return len(students)


client.sadd('English', 'tom', 'jack','zhang')
client.sadd('Match', 'tom', 'jack','mike','lee')

>>> get_students()
5
>>> get_stu_intersection('English','Match')
2
>>> get_stu_union('English','Match')
5

打标签

>>> class Tagging:
...     def __init__(self, client, item):
...         self.client = client
...         self.key = make_tag_key(item)
...     def add(self, *tags):
...         self.client.sadd(self.key, *tags)
...     def remove(self, *tags):
...         self.client.srem(self.key, *tags)
...     def is_included(self, tag):
...         return self.client.sismember(self.key, tag)
...     def get_all_tags(self):
...         return self.client.smembers(self.key)
...     def count(self):
...         return self.client.scard(self.key)
...

>>> book_tags = Tagging(client, "The C Programming Language")
>>> book_tags.add('c')
>>> book_tags.add('programming language')
>>> book_tags.add('computer book')
>>> book_tags.get_all_tags()
set(['c', 'programming language', 'computer book'])
>>> for i in book_tags.get_all_tags():
...   print i
...
c
programming language
computer book

另外有些好友推荐也可以使用SET 差集,调用client.srandmember随机获取几个人。
— over —

打赏

,

对不起,这篇文章暂时关闭评论。