Redis数据类型--集合类型
夫陶公
清风
千古,余又何人,敢称庶几
文章目录
- 介绍
- 一、基本命令
- 1.增加/删除元素
- 2.获得集合中的所有元素
- 3.判断元素是否在集合中
- 4.集合间运算
- 二、命令进阶
- 1.获取集合中元素个数
- 2.进行集合运算并键结果存储
- 3.随机获得集合中的元素
- 4.从集合中弹出一个元素
介绍
一、基本命令
1.增加/删除元素
SADD key member [member …] //
添加
元素
特性
:
- 用来向集合中增加
一个
或多个
元素,键不存在自动
创建。 - 集合中
不能有相同
元素,加入相同元素会被忽略
掉。 - 返回值是
成功加入
集合的元素数量(忽略掉的元素不算
)
SREM key member [member …] //
删除
元素
特性
:
- 从集合中删除
一个
或多个
元素 - 返回值是此次
删除成功
的元素个数 不存在
的元素会被忽略
掉
案例:
SADD
127.0.0.1:6379> sadd letters a //向集合中添加一个元素
(integer) 1
127.0.0.1:6379> sadd letters a b c //元素a已经存在,返回值为 2
(integer) 2
127.0.0.1:6379> sadd letters a b c //3个元素都存在,返回值为 0
(integer) 0
SREM
127.0.0.1:6379> srem letters a //删除元素a 返回值 1
(integer) 1
127.0.0.1:6379> srem letters b d //d元素不存在,返回值为 1
(integer) 1
127.0.0.1:6379> srem letters g //g元素不存在,返回值为 0
(integer) 0
实践:使用Java操作Redis数据库:SADD
、SREM
@Testpublic void test() {Jedis jedis = new Jedis("127.0.0.1", 6379);Long a = jedis.sadd("letters", new String[]{"a"});Long a_b_c = jedis.sadd("letters", new String[]{"a", "b", "c"});System.out.print("添加元素:a" + " ");System.out.println("返回值:" + a);System.out.print("添加元素:a、b、c" + " ");System.out.println("返回值:" + a_b_c);Long rm_a = jedis.srem("letters", new String[]{"a"});Long rm_a_b_c = jedis.srem("letters", new String[]{"a", "b", "c"});Long rm_d = jedis.srem("letters", "d");System.out.print("删除元素:a" + " ");System.out.println("返回值:" + rm_a);System.out.print("删除元素:a、b、c" + " ");System.out.println("返回值:" + rm_a_b_c);System.out.print("删除元素:d" + " ");System.out.println("返回值:" + rm_d);}
添加元素:a 返回值:1
添加元素:a、b、c 返回值:2
删除元素:a 返回值:1
删除元素:a、b、c 返回值:2
删除元素:d 返回值:0
2.获得集合中的所有元素
SMEMBERS key
特性
:
- 获得集合中的
所有
元素 key
不存在时会返回空
127.0.0.1:6379> sadd letters a b c //添加3个元素
(integer) 3
127.0.0.1:6379> smembers letters //获取所有的元素
1) "b"
2) "c"
3) "a"
127.0.0.1:6379> smembers other //获取一个不存在的集合 返回空
(empty list or set)
3.判断元素是否在集合中
SISMEMBER key member
特性
:
- 无论集合中有多少个元素,
时间复杂度
都为:O(1)
member
存在时返回1
,不存在时返回0
key
不存在时返回0
一次
只能判断一个
元素,否则会报错:(error) ERR wrong number of arguments for 'sismember' command
127.0.0.1:6379> smembers letters //获取所有元素
1) "b"
2) "c"
3) "a"
127.0.0.1:6379> sismember letters a //判断元素 a
(integer) 1
127.0.0.1:6379> sismember letters a b //错误语法判断元素 报错
(error) ERR wrong number of arguments for 'sismember' command
127.0.0.1:6379> sismember letters d //判断不存在元素
(integer) 0
4.集合间运算
SDIFF key [key …] //
差集
运算
特性
:
- SDIFF 命令用来对
多个集合
执行差集
运算。 - 集合
A
与集合B
的差集表示为A-B
,代表所有属于A
且不属于B
的元素构成的集合 (如下图所示),且A-B={x|x∈A且x∈B}
。 - SDIFF 命令支持
同时传入多个键(key)
,当有3个以上时,计算顺序是先计算前面两个
,再把计算结果与后面
一个计算,依此类推
。
案例:
首先我们定义3
个集合:setA:1 2 3
;setB:2 3 4
;setC:2 3
,当A与B执行差集运算A-B
时因为在B中存在
2 3 ,不存在1
,所以结果为1
,然后我们再将A-B计算结果1
与C集合
进行差集运算(A-B)-C
,也就是1
与2 3
运算,所以计算结果为1
。
127.0.0.1:6379> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379> sadd setB 2 3 4
(integer) 3
127.0.0.1:6379> sdiff setA setB
1) "1"
127.0.0.1:6379> sadd setC 2 3
(integer) 2
127.0.0.1:6379> sdiff setA setB setC
1) "1"
SINTER key [ key …] //
交集
运算
特性
:
- 用来对
多个集合
进行交集
运算 - 集合A与集合B表示
A∩B
,代表所有属于A
且属于B
的元素构成的集合,即A∩B={x|x∈A且x∈B}
。 - 此命令支持同时传入多个键,
用法同交集运算
。
案例:
127.0.0.1:6379> smembers setA
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> smembers setB
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> sinter setA setB
1) "2"
2) "3"
SUNION key [key …] //
并集
运算
特性
:
- SUNION 命令用来对
多个集合
执行并集
运算 - 集合A与集合B的并集表示
A∪B
,代表所有属于A
或属于B
的元素构成的集合,即A∪B={x|x∈A或x∈B}
。 - 此命令支持同时传入多个键,
用法同交集运算
。
案例
:
127.0.0.1:6379> smembers setA
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> smembers setB
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> sunion setA setB
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> smembers setC
1) "2"
2) "3"
127.0.0.1:6379> sunion setA setB setC
1) "1"
2) "2"
3) "3"
4) "4"
二、命令进阶
1.获取集合中元素个数
SCARD key
此命令用来获取集合中的元素个数
,如果键存在
,那么正常返回集合元素个数,不存在
则返回0
.
7.0.0.1:6379> sadd nums 1 2 3 4 5 6 7 8 9 0
(integer) 10
127.0.0.1:6379> smembers nums1) "0"2) "1"3) "2"4) "3"5) "4"6) "5"7) "6"8) "7"9) "8"
10) "9"
127.0.0.1:6379> scard nums
(integer) 10
127.0.0.1:6379> scard other //other键不存在,返回 0
(integer) 0
2.进行集合运算并键结果存储
下面三个命令和去掉后缀STORE
的用法相同
,只是以下3个命令会将计算结果
存储到键destination
中。
SDIFFSTORE destination key [key …]
SINTERSTORE destination key [key …]
SUNIONSTORE destination key [key …]
上面三个命令的用法和之前的SDIFF
SINTER
SUNION
用法相同,这里不再详细介绍。
127.0.0.1:6379> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379> sadd setB 2 3 4
(integer) 3
127.0.0.1:6379> sadd setC 4 5 6
(integer) 3
127.0.0.1:6379> sdiffstore AB setA setB //将集合setA与集合setB的计算结果存储到集合AB中
(integer) 1
127.0.0.1:6379> keys *
1) "nums"
2) "setB"
3) "setA"
4) "setC"
5) "AB"
127.0.0.1:6379> smembers AB
1) "1"
3.随机获得集合中的元素
SRANDMEMBER key [count]
特性
:
- SRANDMEMBER 命令用来随机从集合中
随机
获取一个
元素(没有count参数情况下
)。 有count参数
可以一次随机获得多个元素
- 当count为
整数
时,获取到的是count
个不重复
的元素 - 当count为
整数
且大于集合中的元素个数
时,会返回集合中的全部元素
- 当count为
负数
时,会随机从集合里获得|count|
个元素,且这些元素可能相同
。
案例:
127.0.0.1:6379> sadd num 1 2 3 4 5 6 7 8 9
(integer) 9
127.0.0.1:6379> smembers num
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> srandmember num //随机获取一个元素
"4"
127.0.0.1:6379> srandmember num //随机获取一个元素
"9"
127.0.0.1:6379> srandmember num 2 //随机获取2个元素 带参数
1) "5"
2) "7"
127.0.0.1:6379> srandmember num 3 //随机获取3个元素 带参数
1) "2"
2) "7"
3) "4"
127.0.0.1:6379> srandmember num 999 //count参数大于集合中的元素,获得全部元素
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> srandmember num -5 //count参数为负数,获取绝对值个元素,这些元素可能相同
1) "8"
2) "8"
3) "6"
4) "8"
5) "4"
127.0.0.1:6379> srandmember num -9
1) "8"
2) "2"
3) "4"
4) "8"
5) "9"
6) "3"
7) "3"
8) "9"
9) "4"
127.0.0.1:6379> srandmember num -11 // count负值大于集合中所有元素1) "8"2) "3"3) "4"4) "1"5) "6"6) "2"7) "2"8) "1"9) "4"
10) "6"
11) "4"
4.从集合中弹出一个元素
SPOP key
此命令的作用是从集合左边弹出
(删除)一个
元素,然后返回元素的值,由于集合无序
,所以弹出的元素是随机
7.0.0.1:6379> sadd nums 1 2 3 4 5 6 7 8
(integer) 8
127.0.0.1:6379> smembers nums
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
127.0.0.1:6379> spop nums
"3"
127.0.0.1:6379> spop nums
"5"
127.0.0.1:6379> spop nums
"1"
注
:从上面的案例结果中可以看出弹出的元素是随机
的。
Redis中文官方网站:http://www.redis.cn
未完待续,持续更新中...
Redis数据类型--集合类型相关推荐
- Redis 数据类型 Strings 类型详解
Redis 数据类型 Strings 类型详解 bitmap 操作 SETBIT • SETBIT key offset value 起始版本:2.2.0 时间复杂度:O(1) 设置或者清空key的v ...
- python集合类型应用场景_python学习笔记(10)--组合数据类型(集合类型)
集合类型 集合是多个元素的无序组合,每个元素唯一,不存在相同类型,每个元素是不可变类型.用{}表示,元素间用逗号分隔.建立结合类型用{},或set函数,如果是空集合必须用set. >>&g ...
- redis有序集合类型sort set
redis的数据类型之-有序集合 sort set和set类型一样,也是string类型元素的集合,也没有重复的元素,不同的是sort set每个元素都会关联一个权,通过权值可以有序的获取集合中的元素 ...
- Redis数据类型--字符串类型
夫陶公清风千古,余又何人,敢称庶几 文章目录 介绍 一.基本命令 1. 赋值与取值 2. 递增数字 二.命令进阶 1. 增加指定的整数 2. 减少指定的整数 3. 增加指定浮点数 4. 向尾部追加值 ...
- 怎样在Redis通过StackExchange.Redis 存储集合类型List
StackExchange 是由StackOverFlow出品, 是对Redis的.NET封装,被越来越多的.NET开发者使用在项目中. 绝大部分原先使用ServiceStack的开发者逐渐都转了过来 ...
- Redis数据类型--列表类型
夫陶公清风千古,余又何人,敢称庶几 文章目录 介绍 一.基本命令 1. 向列表两端增加元素 2.从列表两端弹出元素 3. 获取列表中元素的个数 4.获得列表片段 二.命令进阶 1.获得/设置指定索引的 ...
- redis数据类型 - Hash类型
hash类型,是一个string类型的field和value的映射表. hash存放的是键值对,可以很方便的存放对象. 常用操作 hset 设置hash field为指定值,如果key不存在,则先创建 ...
- Redis常用命令入门4:集合类型
集合类型 之前我们已经介绍过了最基本的字符串类型.散列类型.列表类型,下面我们一起学习一下集合类型. 集合类型也是体现redis一个比较高价值的一个类型了.因为Redis的集合类型,所以我们可以很容易 ...
- Redis数据类型详解(五种)
Redis支持五种数据类型,即string(字符串).hash(哈希).list(列表).set(集合)及zset(sorted set:有序集合),云吞铺子分享Redis数据类型谅解: Redis数 ...
最新文章
- 退信之550 5.7.1 Unable to relay for *@*.com
- NumPy Ndarray 对象
- 学会用core dump调试程序错误(转)
- CTF-Python打包成的exe文件Re逆向
- 错误:Failed to create the Java Virtual Machine
- 【渝粤教育】国家开放大学2018年秋季 2508T学前儿童语言教育 参考试题
- python-temp-0626随堂
- c#动态编译并执行字符串
- 分库分表学习总结(6)——分库分表?选型和流程要慎重,否则流程会失控!
- 工作7年开发小哥转行测试:只有努力向前奔跑,才能得到你要的~
- Linux中的Cron ,任务计划
- QT最常用的字符串操作
- 手机mtkcdc端口如何开启_MTK手机连接电脑说明书
- iOS面试题大全2021(附答案)
- MAYA安装未完成,某些产品无法安装的解决方法
- Xilinx火龙果学习笔记(1)---初识火龙果
- echarts默认高亮省市区联动
- 国产示波器采用的ADC芯片
- 另类方法申请google adsense账号
- dubbo优点是什么dubbo有哪些缺点
热门文章
- node.js ejs的视图模块引擎
- Spark 报错 : Error: bad symbolic reference. A signature in SparkContext.class refers to term conf
- 今年双11,阿里业务100%上云
- Schedulerx2.0分布式计算原理最佳实践
- 阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云
- 如何基于阿里云搭建适合初创企业的轻量级架构?
- 想要成为数据科学家?知道这11种机器学习算法吗?
- 阿里测试环境运维及研发效率提升之道
- CSDN鸿蒙社区福利:HarmonyOS Beta 版内测资格申请
- 漫画:什么是囚徒困境?