共计 2333 个字符,预计需要花费 6 分钟才能阅读完成。
本篇内容介绍了“数据库集合相关命令有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
集合的性质: 唯一性, 无序性, 确定性
无序性,例:{1,2}=={2,1}
唯一性,每一个值都是唯一的
例:插入“python”,“golang”,“python ,“c”, java 5 个值,但实际上,Redis 返回的数字 4,表示实际上只插入了 4 个值。这是因为有两个“python”,集合自动过滤了第 2 个 python”。
注: 在 string 和 link 的命令中, 可以通过 range 来访问 string 中的某几个字符或某几个元素
但, 因为集合的无序性, 无法通过下标或范围来访问部分元素.
因此想看元素, 要么随机先一个, 要么全选
sadd key value1 value2
作用: 往集合 key 中增加元素
sadd 命令在遇到数据己经存在时,会返回“0”,如果数据不存在则把数据插入再返回 1。所以,这条命令可以通过返回的数字来判断数据是否存在。
srem value1 value2
作用: 删除集合中集为 value1 value2 的元素
返回值: 忽略不存在的元素后, 真正删除掉的元素的个数
spop key
作用: 返回并删除集合中 key 中 1 个随机元素
随机 – 体现了无序性
(spop 会弹出 / 删除 key 中的元素,可以用这个来抽奖,第一名抽出来,第二名,第三名 …)
srandmember key
作用: 返回集合 key 中, 随机的 1 个元素.
(和 spop 不同,不会弹出 / 删除 key 中的元素)
sismember key value
作用: 判断 value 是否在 key 集合中
是返回 1, 否返回 0
smembers key
作用: 返回集中中所有的元素
注意:
smembers 命令不会删除数据。但是如果集合里的数据量极大,就应该慎重使用“获取所有数据,因为这样会导致系统的 I / o 资源瞬间耗尽
scard key
作用: 返回集合中元素的个数
smove source dest value
作用: 把 source 中的 value 删除, 并添加到 dest 集合中
sinter key1 key2 key3
作用: 求出 key1 key2 key3 三个集合中的交集, 并返回
redis 127.0.0.1:6379 sadd s1 0 2 4 6
(integer) 4
redis 127.0.0.1:6379 sadd s2 1 2 3 4
(integer) 4
redis 127.0.0.1:6379 sadd s3 4 8 9 12
(integer) 4
redis 127.0.0.1:6379 sinter s1 s2 s3
1) 4
redis 127.0.0.1:6379 sinter s3 s1 s2
1) 4
sinterstore dest key1 key2 key3
作用: 求出 key1 key2 key3 三个集合中的交集, 并赋给 dest
suion key1 key2.. Keyn
作用: 求出 key1 key2 keyn 的并集, 并返回
sdiff key1 key2 key3
作用: 求出 key1 与 key2 key3 的差集
即 key1-key2-key3
集合的应用:
在工程中,Redis 的集合一般有两种用途:
(I)根据集合内数据不重复的特性实现去重并记录信息。
(2)利用多个集合计算交集、并集和差集。
假设,要做一个学生选课情况实时监控系统,则需要实时知道以下几个数据:
(I)当前一共有多少学生至少选了一门课。
(2)选了 A 课没有选 B 课的学生有多少。
(3)既选了 A 课又选了 B 课的学生有多少。
(4) A、B 两门课至少选了一门的学生有多少。
使用集合可以轻易实现这样的功能。每一门课作为一个集合,里面的值就是每一个学生的
学号,如图 5 -65 所示:
用 python 实现:
import redis
client = redis.Redis(host= xx.xx.xx.xx’)
all_class = [algorithm’,’computer’,’history’,’circuit_design’,’math]
def all_student():
students = client.sunion(*all_class)
return len(students)
def in_a_and_in_b(class_a,class_b):
students = client.sinter(class_a,class_b)
return len(students)
def in_a_not_in_b(class_a,class_b):
students = client.sdiff(class a , class b)
return len(students)
def in_a_or_in_b(class_a,class_b):
students= client.sunion(classa,classb)
return len(students)
def in_a_or_in_b(class_a,class_b):
students = client.sunion(class_a,class_b)
return len(students)
// 选了至少一门课:all_student()
// 选了 math 没选 computer 的:in_a_not_in_b(math , computer)
// 选了 math 也选了 computer 的学生:in_a_and_in_b(math , computer)
// 选了 math 或选了 computer 的学生:in_a_or_in_b(math , computer)
“数据库集合相关命令有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!