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数据库SADDSREM

@Test
    public 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个以上时,计算顺序是先计算前面两个,再把计算结果与后面一个计算,依此类推

Redis数据类型--集合类型_第1张图片

案例:

首先我们定义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 nums
 1) "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数据类型--集合类型_第2张图片

你可能感兴趣的:(数据库,redis,数据库)