高级程序员必须精通的Redis,第四篇之——set(集合)

Posted 李子捌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高级程序员必须精通的Redis,第四篇之——set(集合)相关的知识,希望对你有一定的参考价值。

1、简介

Redis中所有的的数据结构都是通过一个唯一的字符串key来获取相应的value数据。
Redis有5种基础数据结构,分别是:

  • string(字符串)
  • list(列表)
  • hash(字典)
  • set(集合)
  • zset(有序集合)

其中list、set、hash、zset这四种数据结构是容器型数据结构,它们共享下面两条通用规则:

  • create if not exists:容器不存在则创建
  • drop if no elements:如果容器中没有元素,则立即删除容器,释放内存

本文讲述的是Redis的5种基础数据结构中的set(集合) 

2、set(集合)相关介绍

2.1 set(集合)的内部结构

Redis的set(集合)相当于Java语言里的HashSet,它内部的键值对是无序的、唯一的。它的内部实现了一个所有value为null的特殊字典。
集合中的最后一个元素被移除之后,数据结构被自动删除,内存被回收。

set结构 (1).png

2.2 set(集合)的使用场景

set(集合)由于其特殊去重复的功能,我们可以用来存储活动中中奖的用户的ID,这样可以保证一个用户不会中奖两次。

3、set(集合)相关指令

sadd -> 添加集合成员,key值集合名称,member值集合元素,元素不能重复

sadd key member [member …]

1127.0.0.1:6379> sadd name zhangsan
2(integer) 1
3127.0.0.1:6379> sadd name zhangsan        # 不能重复,重复返回0
4(integer) 0
5127.0.0.1:6379> sadd name lisi wangwu liumazi # 支持一次添加多个元素
6(integer) 3

smembers -> 查看集合中所有的元素,注意是无序的

smembers key

1127.0.0.1:6379> smembers name    # 无序输出集合中所有的元素
21) "lisi"
32) "wangwu"
43) "liumazi"
54) "zhangsan"

sismember -> 查询集合中是否包含某个元素

sismember key member

1127.0.0.1:6379> sismember name lisi  # 包含返回1
2(integer) 1
3127.0.0.1:6379> sismember name tianqi # 不包含返回0
4(integer) 0

scard -> 获取集合的长度

scard key

1127.0.0.1:6379> scard name
2(integer) 4

spop -> 弹出元素,count指弹出元素的个数

spop key [count]

1127.0.0.1:6379> spop name            # 默认弹出一个
2"wangwu"
3127.0.0.1:6379> spop name 3    
41) "lisi"
52) "zhangsan"
63) "liumazi"

以上是关于高级程序员必须精通的Redis,第四篇之——set(集合)的主要内容,如果未能解决你的问题,请参考以下文章

高级程序员必须精通的Redis,第五篇之——zset(有序集合)

Redis系列第四篇之Bitmap

MySQL还能这样玩---第四篇之分区原理

Flink第四篇之Flink的DataStream API(算子解析)

好玩的ES--第四篇之聚合查询和集群

好玩的ES--第四篇之聚合查询和集群