四、各类型指令介绍
(四)Set类型
1. 基本指令
sadd key 1 2 3 4
type key
sadd k 1 1 2 3 4 # 添加元素,有重复会自动删除
smembers key
smembers k
sismember key 1
sismember key 5 # 删除不存在的元素,找不到该元素则删除0个

smembers key
# 随机删除 -- 返回删除成功的元素
spop key
spop key
spop key
spop key
# 指定删除 -- 返回删除成功的元素个数
smembers k
srem k 11
srem k 11 # 删除不存在的元素
smembers k
srem k 8 9 10
smembers k


sadd key 1 2 3 4 5 6 7 8
smembers key
srandmember key # 获取随机数

smembers key
smembers k
# 若元素重复则不会返回错误,只不过最终不会重复
# 若key中不存在该元素,则最终返回0
smove key k 5 6 7 8 # error
smove key k 5
smove key k 6
smove key k 7
smove key k 8
smembers key
smembers k

# inter 交集;union 并集;
# diff 差集:在 k1 中存在 在 k2 中不存在
smembers key
smembers k
sinter key k
sinterstore kk key k
smembers kk
smembers k1
smembers k2
sunion k1 k2
sunionstore key k1 k2
smemberss key
smembers k1
smembers k2
sdiff k1 k2 # 在 k1 中存在,而在 k2 中不存在
sdiff k2 k1 # 在 k2 中存在,而在 k1 中不存在
sdiffstore kk k1 k2
sdiffstore kk k2 k1



2. 内部编码
OBJECR encoding key # intset
sadd kkk hello world
smembers kkk
OBJECT encoding kkk # hashtable

intset(整数集合)类型是为了节省空间,而做出的特定优化。当元素均为整数 且 元素个数不是很多的时,set的内部编码就是intset。
在 C++中的std:set背后的数据结构是红黑树;而Java中的Set本身是一个接口,这个接口后面的实现可以是TreeSet,也可以是 HashSet。

897

被折叠的 条评论
为什么被折叠?



