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 —
下一篇: Redis学习04之 List列表
对不起,这篇文章暂时关闭评论。