前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >005.Redis基本数据结构四:集合

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

作者头像
CoderJed
发布2020-03-25 17:51:06
2610
发布2020-03-25 17:51:06
举报
文章被收录于专栏:Jed的技术阶梯

1. 集合简介

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

2. 常用命令

代码语言:javascript
复制
# (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. 集合间操作

代码语言:javascript
复制
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来作为集合的内部实现,从而减少内存的使用。

代码语言:javascript
复制
set-max-intset-entries 512
代码语言:javascript
复制
beh07:6379> SADD nums 1 2 3
(integer) 3
beh07:6379> object encoding nums
"intset"

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

代码语言:javascript
复制
beh07:6379> sadd names tom tony 
(integer) 2
beh07:6379> object encoding names
"hashtable"
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 集合简介
  • 2. 常用命令
  • 3. 集合间操作
  • 4. 内部编码
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档