《Redis操作Python系列、redis基本命令 set|CSDN创作打卡》

导读

  set类型是string类型的集合,其特点是集合元素无序且不重复,每个集合最多可以存储 232 - 1 个元素(40多亿),set类型主要有以下应用场景。

1. 好友/关注/粉丝/感兴趣的人集合

  set类型唯一的特点使得其适合用于存储好友/关注/粉丝/感兴趣的人集合,集合中的元素数量可能很多,每次全部取出来成本不小,set类型提供了一些很实用的命令用于直接操作这些集合,如:

a. sinter命令可以获得A和B两个用户的共同好友

b. sismember命令可以判断A是否是B的好友

c. scard命令可以获取好友数量

d. 关注时,smove命令可以将B从A的粉丝集合转移到A的好友集合

2. 随机展示

  通常,app首页的展示区域有限,但是又不能总是展示固定的内容,一种做法是先确定一批需要展示的内容,再从中随机获取。如下图所示,酷狗音乐K歌擂台赛当日的打擂歌曲共29首,首页随机展示5首;昨日打擂金曲共200首,首页随机展示30首。

set类型适合存放所有需要展示的内容,而srandmember命令则可以从中随机获取几个。

3. 黑名单/白名单

  经常有业务出于安全性方面的考虑,需要设置用户黑名单、ip黑名单、设备黑名单等,set类型适合存储这些黑名单数据,sismember命令可用于判断用户、ip、设备是否处于黑名单之中。

创建测试类【demo12.py】

新增

sadd(name,values)

name - 对应的集合中添加元素

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.sadd("myset","方块A","梅花A","红桃A","黑桃A","大王","小王")

print(r.scard("myset"))#集合长度
print(r.smembers("myset"))#查询所有成员

 《Redis操作Python系列、redis基本命令 set|CSDN创作打卡》_第1张图片

元组方式获取

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.sadd("myset","方块A","梅花A","红桃A","黑桃A","大王","小王")

scan=r.sscan("myset")#按照元组的方式获取
print(scan)

print(r.sscan_iter("myset"))#获取迭代器
#遍历迭代器
for str in r.sscan_iter("myset"):
    print(str)

《Redis操作Python系列、redis基本命令 set|CSDN创作打卡》_第2张图片

差集

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.sadd("myset1","方块A","梅花A","红桃A","黑桃A","大王","小王")
r.sadd("myset2","方块2","梅花2","红桃2","黑桃2","大王","小王")

print(r.smembers("myset1"))#myset1所有元素
print(r.smembers("myset2"))#myset2所有元素

print(r.sdiff("myset1","myset2"))#myset1对myset2的差集
print(r.sdiff("myset2","myset1"))#myset2对myset1的差集

r.sdiffstore("myset3","myset1","myset2")#将myset1对myset2的差集存储到myset3中
print("myset3:",r.smembers("myset3"))

《Redis操作Python系列、redis基本命令 set|CSDN创作打卡》_第3张图片

交集

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.sadd("myset1","方块A","梅花A","红桃A","黑桃A","大王","小王")
r.sadd("myset2","方块2","梅花2","红桃2","黑桃2","大王","小王")

print(r.smembers("myset1"))#myset1所有元素
print(r.smembers("myset2"))#myset2所有元素

print(r.sinter("myset1","myset2"))#myset1对myset2的交集
print(r.sinter("myset2","myset1"))#myset2对myset1的交集

r.sinterstore("myset3","myset1","myset2")#将myset1对myset2的交集存储到myset3中
print("myset3:",r.smembers("myset3"))

《Redis操作Python系列、redis基本命令 set|CSDN创作打卡》_第4张图片

并集

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.sadd("myset1","方块A","梅花A","红桃A","黑桃A","大王","小王")
r.sadd("myset2","方块2","梅花2","红桃2","黑桃2","大王","小王")

print(r.smembers("myset1"))#myset1所有元素
print(r.smembers("myset2"))#myset2所有元素

print(r.sunion("myset1","myset2"))#myset1对myset2的并集
print(r.sunion("myset2","myset1"))#myset2对myset1的并集

r.sunionstore("myset3","myset1","myset2")#将myset1对myset2的并集存储到myset3中
print("myset3:",r.smembers("myset3"))

《Redis操作Python系列、redis基本命令 set|CSDN创作打卡》_第5张图片

判断是否是集合的成员

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.sadd("myset1","方块A","梅花A","红桃A","黑桃A","大王","小王")

print(r.smembers("myset1"))#myset1所有元素

print(r.sismember("myset1","红桃A"))#判断红桃A是否是集合中的成员
print(r.sismember("myset1","红桃2"))#判断红桃2是否是集合中的成员

《Redis操作Python系列、redis基本命令 set|CSDN创作打卡》_第6张图片

移动

smove(src, dst, value)

将某个成员从一个集合中移动到另外一个集合

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.sadd("myset1","方块A","梅花A","红桃A","黑桃A","大王","小王")
r.sadd("myset2","方块2","梅花2","红桃2","黑桃2","大王","小王")

print(r.smembers("myset1"))#myset1所有元素
print(r.smembers("myset2"))#myset2所有元素

r.smove("myset1", "myset2", "方块A")

print(r.smembers("myset1"))#myset1所有元素
print(r.smembers("myset2"))#myset2所有元素

《Redis操作Python系列、redis基本命令 set|CSDN创作打卡》_第7张图片

删除·可以随机或指定删除

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.sadd("myset1","方块A","梅花A","红桃A","黑桃A","大王","小王")
r.sadd("myset2","方块2","梅花2","红桃2","黑桃2","大王","小王")

print(r.smembers("myset1"))#myset1所有元素
print(r.smembers("myset2"))#myset2所有元素

print("随机删除:",r.spop("myset1"))
print("指定删除",r.srem("myset2","小王"))

print(r.smembers("myset1"))#myset1所有元素
print(r.smembers("myset2"))#myset2所有元素

《Redis操作Python系列、redis基本命令 set|CSDN创作打卡》_第8张图片 

希望能对大家有所帮助。欢迎一键三连

你可能感兴趣的:(Redis_python用法,redis,python,数据库)