Redis-6-redis操作集合(sets)

本文介绍了Redis中的集合(Sets)操作,包括sadd、smembers、scard、sinter、sinterstore、sunion、sunionstore、sdiff、sdiffstore、sismember、smove、spop、srandmember和srem等方法,详细阐述了它们的功能和用法,帮助读者理解如何在Redis中进行集合的增删查改操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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'}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值