这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战
15redis基本类型之集合对象
存储结构与编码方式
集合对象的编码可以是intset或者hashtable
intset编码的集合对象使用整数集合作为底层实现,hashtable编码的集合对象使用字典作为底层实现,字典的每个键都是一个字符串对象,每个字符串对象包含一个集合元素,而字典的值则全部被设置为null
集合对象保存的所有元素都是整数值,并且保存的元素数量不超过512个,对象使用intset编码,即底层使用整数集合来存储,否则使用hashtable编码,底层使用字典来存储
常用命令:
SADD
一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
假如 key 不存在,则创建一个只包含 member 元素作成员的集合。
# 添加单个元素
redis> SADD bbs "discuz.net"
(integer) 1
# 添加重复元素
redis> SADD bbs "discuz.net"
(integer) 0
# 添加多个元素
redis> SADD bbs "tianya.cn" "groups.google.com"
(integer) 2
redis> SMEMBERS bbs
1) "discuz.net"
2) "groups.google.com"
3) "tianya.cn"
SCARD key
返回集合 key 的基数(集合中元素的数量)。当 key 不存在时,返回 0 。
redis> SADD tool pc printer phone
(integer) 3
redis> SCARD tool # 非空集合
(integer) 3
redis> DEL tool
(integer) 1
redis> SCARD tool # 空集合
(integer) 0
SMEMBERS key
返回集合 key 中的所有成员
# key 不存在或集合为空
redis> EXISTS not_exists_key
(integer) 0
redis> SMEMBERS not_exists_key
(empty list or set)
# 非空集合
redis> SADD language Ruby Python Clojure
(integer) 3
redis> SMEMBERS language
1) "Python"
2) "Ruby"
3) "Clojure"
SPOP key
移除并返回集合中的一个随机元素。当 key 不存在或 key 是空集时,返回 nil 。如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用 SRANDMEMBER命令。
redis> SMEMBERS db
1) "MySQL"
2) "MongoDB"
3) "Redis"
redis> SPOP db
"Redis"
redis> SMEMBERS db
1) "MySQL"
2) "MongoDB"
redis> SPOP db
"MySQL"
redis> SMEMBERS db
1) "MongoDB"
这就是 redis基本类型之集合对象的大概内容了,如果你感觉不错的话点个赞吧。