005.Redis基本数据结构四:集合

2020-03-21  本文已影响0人  CoderJed

1. 集合简介

集合(set)类型用来保存多个字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素。

2. 常用命令

# (1) 添加元素
beh07:6379> SADD hobbies book music
(integer) 2 # 返回添加成功的元素的个数
beh07:6379> SADD hobbies book
(integer) 0

# (2) 删除元素
beh07:6379> SREM hobbies music
(integer) 1 # 返回删除成功的个数

# (3) 统计集合中元素的个数
beh07:6379> SCARD hobbies
(integer) 1

# (4) 判断元素是否在集合中,1代表true,0代表false
beh07:6379> SISMEMBER hobbies music
(integer) 0
beh07:6379> SISMEMBER hobbies book
(integer) 1

# (5) 从集合中随机返回指定个数的元素(默认返回一个)
beh07:6379> SADD nums 1 2 3 4 5 6 7 8 9
(integer) 9
beh07:6379> SRANDMEMBER nums
"3"
beh07:6379> SRANDMEMBER nums 3
1) "4"
2) "7"
3) "3"

# (6) 从集合中随机弹出一个元素(该元素被删除)
beh07:6379> SPOP nums 
"7"
beh07:6379> SPOP nums 3
1) "4"
2) "2"
3) "9"
beh07:6379> SMEMBERS nums
1) "1"
2) "3"
3) "5"
4) "6"
5) "8"

# (7) 获取全部元素
beh07:6379> SMEMBERS nums
1) "1"
2) "3"
3) "5"
4) "6"
5) "8"

3. 集合间操作

beh07:6379> SADD nums1 1 2 3 4 5
(integer) 5
beh07:6379> SADD nums2 1 3 5 7 9
(integer) 5

# (1) 交集
beh07:6379> SINTER nums1 nums2
1) "1"
2) "3"
3) "5"

# (2) 并集
beh07:6379> SUNION nums1 nums2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "7"
7) "9"

# (3) 差集(求左边存在而右边不存在的元素)
beh07:6379> SDIFF nums1 nums2
1) "2"
2) "4"
beh07:6379> SDIFF nums2 nums1
1) "7"
2) "9"

# (4) 将集合运算结果保存到另一个集合中
# 将nums1和nums2这两个集合的交集保存到nums1_inter_nums2这个集合中
# SUNIONSTORE和SDIFFSTORE这两个命令的作用同理
beh07:6379> SINTERSTORE nums1_inter_nums2 nums1 nums2
(integer) 3
beh07:6379> SMEMBERS nums1_inter_nums2
1) "1"
2) "3"
3) "5"

4. 内部编码

当集合中的元素都是整数且元素个数小于set-max-intset-entries这个配置的值时,Redis会选用intset来作为集合的内部实现,从而减少内存的使用。

set-max-intset-entries 512
beh07:6379> SADD nums 1 2 3
(integer) 3
beh07:6379> object encoding nums
"intset"

当set中存储的是字符串类型的值或者存储的int类型的值的个数大于set-max-intset-entries设置的值后,Redis会选用hashtable来作为集合的内部实现。

beh07:6379> sadd names tom tony 
(integer) 2
beh07:6379> object encoding names
"hashtable"
上一篇 下一篇

猜你喜欢

热点阅读