前言
set集合就是不重复的列表
sets常用方法
sadd(name,values):给name对应的集合添加元素
smembers(name):获取name对应集合的所有元素
scard(name):获取name对应集合的个数(集合长度)
import redis
r = redis.Redis()
r.sadd("set001",1)
r.sadd("set001",2)
r.sadd("set001",3)
r.sadd("set001",3)
print("集合所有元素:",r.smembers("set001")) # 结果:{b'2', b'1', b'3'},set会默认去除重复数据
print("集合长度:",r.scard("set001")) # 结果:3
sinter(keys, *args):返回多个集合的交集结果
import redis
r = redis.Redis()
r.sadd("set001",11,22,33)
r.sadd("set002",11,22)
r.sadd("set003",22,33,44)
print(r.sinter("set001","set002","set003")) # 结果:{b'22'}
sinterstore(dest,keys, *args):将sinter的结果保存在新的集合中
import redis
r = redis.Redis()
r.sadd("set001",11,22,33)
r.sadd("set002",11,22)
r.sadd("set003",22,33,44)
r.sinterstore("set_1","set001","set002","set003")
print(r.smembers("set_1")) # 结果:{b'22'}
sunion(keys, *args):返回多个集合的并集结果
import redis
r = redis.Redis()
r.sadd("set001",11,22,33)
r.sadd("set002",11,22)
r.sadd("set003",22,33,44)
print(r.sunion("set001","set002","set003")) # 结果:{b'22', b'44', b'11', b'33'}
sunionstore(dest,keys, *args):将sunion的结果保存在新的集合中
import redis
r = redis.Redis()
r.sadd("set001",11,22,33)
r.sadd("set002",11,22)
r.sadd("set003",22,33,44)
r.sunionstore("set_2","set001","set002","set003")
print(r.smembers("set_2")) # 结果:{b'44', b'22', b'33', b'11'}
sdiff(keys, *args):只存在对应name集合中,不在其他集合中
import redis
r = redis.Redis()
r.sadd("set004","s","u","n","y")
r.sadd("set005","u","n")
r.sadd("set006","n","e","r")
print(r.sdiff("set004","set005","set006")) # 结果:{b's', b'y'},在set004中,但不在set005和set0006中
sdiffstore(dest, keys, *args):把sdiff的结果存在新的集合中
import redis
r = redis.Redis()
r.sadd("set004","s","u","n","y")
r.sadd("set005","u","n")
r.sadd("set006","n","e","r")
r.sdiffstore("set_3","set004","set005","set006") # new_set为新的集合,存放sdiff的结果
print(r.smembers("set_3")) # 结果:{b's', b'y'}
sismember(name, value):判断指定value是否在name对应的集合中,存在返回True,不存在返回False
import redis
r = redis.Redis()
r.sadd("set007","s","u","n")
print(r.sismember("set007","s")) # 结果:True
print(r.sismember("set007","y")) # 结果:False
smove(src, dst, value):将一个集合中的元素,移动到另一个集合中去
src:从这个集合中移动
dst:移动到这个集合中去
value:集合中的元素
import redis
r = redis.Redis()
r.sadd("set008",10,20,30,90)
r.sadd("set009",100,200,300)
r.smove("set008","set009",90)
print(r.smembers("set009")) # 结果:{b'90', b'300', b'200', b'100'}
spop(name):集合右侧删除一个元素,并将这个元素返回(因为集合是无序的,所以这里的删除不是添加的顺序来的)
import redis
r = redis.Redis()
r.sadd("set010",10,20,30,90,100,120,150)
print(r.spop("set010")) # b'20'
print(r.spop("set010")) # b'10'
print(r.spop("set010")) # b'100'
srandmember(name, number=None):默认number为None,即直接返回一个随机元素,下面源码贴出来了,意思想要随机指定个数的元素,需要redis2.6以上版本才可以,因为我安装的是2.4,所以指定个数的时候报错了,满足条件的可以试试,这里只演示返回一个元素的情况
def srandmember(self, name, number=None):
"""
If ``number`` is None, returns a random member of set ``name``.
If ``number`` is supplied, returns a list of ``number`` random
memebers of set ``name``. Note this is only available when running
Redis 2.6+.
"""
args = (number is not None) and [number] or []
return self.execute_command('SRANDMEMBER', name, *args)
import redis
r = redis.Redis()
r.sadd("set011",10,20,30,90,100,120,150)
print(r.srandmember("set011")) # 结果:b'100'
srem(name, values):删除name对应集合中的具体元素
import redis
r = redis.Redis()
r.sadd("set012",10,20,30,90,100,120,150) # 添加集合中的元素
r.srem("set012",120,150,90) # 删除集合中的120,150,90这三个元素
print(r.smembers("set012")) # 删除后的结果:{b'20', b'100', b'30', b'10'}