Redis带你深入学习数据类型set

目录

1、set

2、set相关命令

2.1、添加元素 sadd

2.2、获取元素 smembers

2.3、判断元素是否存在 sismember

2.4、获取set中元素数量 scard

2.5、删除元素spop、srem

2.6、移动元素smove

2.7、集合中相关命令:sinter、sinterstore、sunion、sunionstore、sdiff、sdiffstore

3、应用场景


1、set

set数据类型的特点:

  • set中的元素是无序的
  • set中的元素不能重复
  • set中支持多个几个取交集并集差集等~

2、set相关命令

2.1、添加元素 sadd

  • sadd:往集合中添加元素;重复元素无法添加到集合中
  • 语法:sadd key member [member ...]
  • 返回值:成功添加元素的个数(集合已经存在的元素,再次添加不算为添加成功)
  • 时间复杂度O(1)

举例:

Redis带你深入学习数据类型set_第1张图片

2.2、获取元素 smembers

  • smembers:获取一个key中的所有元素;元素顺序是无序的
  • 语法:smembers key
  • 返回值:集合中的所有元素
  • 时间复杂度O(1)

举例:

Redis带你深入学习数据类型set_第2张图片

        注:当集合中存放的都是整数,且数量不是特别多的情况下,内部编码是intset,此时虽然是无序的,但我本人猜测可能还是有处理的,相对来说还是有序的,从小到大 排列~

        当内部编码是hashtable时,就是完全无序了~

2.3、判断元素是否存在 sismember

  • sismember:判断元素是否存在
  • 语法:sismember key member
  • 返回值:1表示存在,0表示不存在
  • 时间复杂度

举例:

Redis带你深入学习数据类型set_第3张图片

2.4、获取set中元素数量 scard

  • scard:获取一个set的基数,也就是set中的元素个数
  • 语法:scard key
  • 返回值:set内的元素的个数
  • 时间复杂度O(1)

举例:

Redis带你深入学习数据类型set_第4张图片

2.5、删除元素spop、srem

spop: 随机删除一个或多个元素,由于set中元素是无序的,所以具体删除哪个元素也是随机的

  • 语法:spop key [count]  【不带参数默认为1】
  • 返回值:被删除的元素的值
  • 时间复杂度O(n) --- n->count

举例:

Redis带你深入学习数据类型set_第5张图片

srem:删除集合中指定的元素

  • 语法:srem key member [member...]
  • 返回值:成功删除的元素个数
  • 时间复杂度O(k)---被删除的个数~

举例:

Redis带你深入学习数据类型set_第6张图片

2.6、移动元素smove

  • smove:将一个元素从一个集合中移动到另一个集合中~
  • 语法:smove source destination member
  • 返回值:命令执行成功返回1;失败返回0
  • 时间复杂度O(1)

举例:

Redis带你深入学习数据类型set_第7张图片

2.7、集合中相关命令:sinter、sinterstore、sunion、sunionstore、sdiff、sdiffstore

sinter:获取指定set的交集中的元素

  • 语法:sinter key [key...]
  • 返回值:交集的元素
  • 时间复杂度O(n*m)---->n是最小的集合元素个数,m是最大的集合元素个数

举例:

Redis带你深入学习数据类型set_第8张图片

sinterstore:获取指定set的交集中的元素并保存到另一个指定集合set中

  • 语法:sinterstore destination key [key...]
  • 返回值:交集元素个数
  • 时间复杂度O(n*m)---->n是最小的集合元素个数,m是最大的集合元素个数

举例: 

Redis带你深入学习数据类型set_第9张图片

sunion:获取指定的集合set的并集中的元素

  • 语法:sunion key [key...]
  • 返回值:并集的元素
  • 时间复杂度O(N)---N为指定的所有的集合set的总的元素个数

举例:

Redis带你深入学习数据类型set_第10张图片

sunionstore:获取指定的集合set的并集中的元素并保存到指定的目标集合set中

  • 语法:sunionstore
  • 返回值:并集的元素个数
  • 时间复杂度O(N)---N为指定的所有的集合set的总的元素个数

举例:

Redis带你深入学习数据类型set_第11张图片

sdiff:获取指定的集合set的差集中元素

  • 语法:sdiff key [key...]
  • 返回值:差集的元素
  • 时间复杂度O(N)---N为指定的所有的集合set的总的元素个数

举例:

Redis带你深入学习数据类型set_第12张图片

sdiffstore:

  • 语法:sdiffstore
  • 返回值:差集的元素个数
  • 时间复杂度O(N)---N为指定的所有的集合set的总的元素个数

举例:

Redis带你深入学习数据类型set_第13张图片


3、应用场景

3.1、使用set来保存用户的标签

        例如最常见的“人物画像”,给相应的用户打上对应标签后,针对性给该用户推送他可能感兴趣的话题

        或者例如:我们博客网站常常使用到的兴趣标签,把一个个有着相同爱好,关注类似内容的用户利用一个标签把他们进行归并

3.2、使用set计算用户间的共同好友

        共同好友功能,共同喜好,或者可以引申到二度好友之类的扩展应用

        例如QQ中有一个功能叫做你可能认识的人~

3.3、使用set统计UV

        PV:用户每次访问某一个服务器时,都会产生一个pv

        UV:用户访问服务器,会产生一个UV,但同一个多次访问不会使UV增加,所以使用set统计UV,能够很好的做到去重~

好啦,下期见啦~

你可能感兴趣的:(Redis,redis)