夫陶公清风千古,余又何人,敢称庶几


文章目录

  • 介绍
    • 一、基本命令
      • 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数据库:SADDSREM

@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计算结果1C集合进行差集运算(A-B)-C,也就是12 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数据类型--集合类型相关推荐

  1. Redis 数据类型 Strings 类型详解

    Redis 数据类型 Strings 类型详解 bitmap 操作 SETBIT • SETBIT key offset value 起始版本:2.2.0 时间复杂度:O(1) 设置或者清空key的v ...

  2. python集合类型应用场景_python学习笔记(10)--组合数据类型(集合类型)

    集合类型 集合是多个元素的无序组合,每个元素唯一,不存在相同类型,每个元素是不可变类型.用{}表示,元素间用逗号分隔.建立结合类型用{},或set函数,如果是空集合必须用set. >>&g ...

  3. redis有序集合类型sort set

    redis的数据类型之-有序集合 sort set和set类型一样,也是string类型元素的集合,也没有重复的元素,不同的是sort set每个元素都会关联一个权,通过权值可以有序的获取集合中的元素 ...

  4. Redis数据类型--字符串类型

    夫陶公清风千古,余又何人,敢称庶几 文章目录 介绍 一.基本命令 1. 赋值与取值 2. 递增数字 二.命令进阶 1. 增加指定的整数 2. 减少指定的整数 3. 增加指定浮点数 4. 向尾部追加值 ...

  5. 怎样在Redis通过StackExchange.Redis 存储集合类型List

    StackExchange 是由StackOverFlow出品, 是对Redis的.NET封装,被越来越多的.NET开发者使用在项目中. 绝大部分原先使用ServiceStack的开发者逐渐都转了过来 ...

  6. Redis数据类型--列表类型

    夫陶公清风千古,余又何人,敢称庶几 文章目录 介绍 一.基本命令 1. 向列表两端增加元素 2.从列表两端弹出元素 3. 获取列表中元素的个数 4.获得列表片段 二.命令进阶 1.获得/设置指定索引的 ...

  7. redis数据类型 - Hash类型

    hash类型,是一个string类型的field和value的映射表. hash存放的是键值对,可以很方便的存放对象. 常用操作 hset 设置hash field为指定值,如果key不存在,则先创建 ...

  8. Redis常用命令入门4:集合类型

    集合类型 之前我们已经介绍过了最基本的字符串类型.散列类型.列表类型,下面我们一起学习一下集合类型. 集合类型也是体现redis一个比较高价值的一个类型了.因为Redis的集合类型,所以我们可以很容易 ...

  9. Redis数据类型详解(五种)

    Redis支持五种数据类型,即string(字符串).hash(哈希).list(列表).set(集合)及zset(sorted set:有序集合),云吞铺子分享Redis数据类型谅解: Redis数 ...

最新文章

  1. 退信之550 5.7.1 Unable to relay for *@*.com
  2. NumPy Ndarray 对象
  3. 学会用core dump调试程序错误(转)
  4. CTF-Python打包成的exe文件Re逆向
  5. 错误:Failed to create the Java Virtual Machine
  6. 【渝粤教育】国家开放大学2018年秋季 2508T学前儿童语言教育 参考试题
  7. python-temp-0626随堂
  8. c#动态编译并执行字符串
  9. 分库分表学习总结(6)——分库分表?选型和流程要慎重,否则流程会失控!
  10. 工作7年开发小哥转行测试:只有努力向前奔跑,才能得到你要的~
  11. Linux中的Cron ,任务计划
  12. QT最常用的字符串操作
  13. 手机mtkcdc端口如何开启_MTK手机连接电脑说明书
  14. iOS面试题大全2021(附答案)
  15. MAYA安装未完成,某些产品无法安装的解决方法
  16. Xilinx火龙果学习笔记(1)---初识火龙果
  17. echarts默认高亮省市区联动
  18. 国产示波器采用的ADC芯片
  19. 另类方法申请google adsense账号
  20. dubbo优点是什么dubbo有哪些缺点

热门文章

  1. node.js ejs的视图模块引擎
  2. Spark 报错 : Error: bad symbolic reference. A signature in SparkContext.class refers to term conf
  3. 今年双11,阿里业务100%上云
  4. Schedulerx2.0分布式计算原理最佳实践
  5. 阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云
  6. 如何基于阿里云搭建适合初创企业的轻量级架构?
  7. 想要成为数据科学家?知道这11种机器学习算法吗?
  8. 阿里测试环境运维及研发效率提升之道
  9. CSDN鸿蒙社区福利:HarmonyOS Beta 版内测资格申请
  10. 漫画:什么是囚徒困境?