Redis数据类型—Set类型

145 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

redis set是无序集合,集合中每个元素都是唯一的,它是通过哈希表实现的,相当于java当中的Map;下面来介绍一下redis set中常用的命令:

SADD命令

sadd key value1 value2 ......

示例:

redis> sadd my_set v1 v2 v3
3

sadd命令表示将多个元素放进my_set集合当中;

SCARD命令

scard key

示例:

redis> scard my_set
3

scard命令用来统计当前集合中元素的总数;

SPOP命令

spop key

示例:

redis> spop my_set
v3

spop命令将移除并随机返回集合中的一个元素;

SREM命令

srem key value1 value2 ......

示例:

redis> srem my_set v1 v2
2
redis> scard my_set
0

srem命令从集合中移除指定元素;

SMEMBERS命令

smembers key

示例:

redis> sadd myset v1 v2 v3 v4
4
redis> smembers myset
0 v3
1 v2
2 v4
3 v1

smembers命令将返回集合中的所有元素;

SRANDMEMBER命令

srandmember key [count]

示例:

redis> srandmember myset 2
0 v3
1 v1

srandmember命令将随机返回指定数量的元素;

SDIFF命令

sdiff key1 key2

示例:

redis> sadd my_set hello world v2
3
redis> sadd your_set hello v2 v3
3
redis> sdiff my_set your_set
0 world

sdiff命令将返回第一个集合与其他集合的差异;

SDIFFSTORE命令

sdiffstore destination key1 key2

示例:

redis> sdiffstore target_set my_set your_set
1
redis> smembers target_set
0 world

根据上述示例,sdiffstore命令会将my_setyour_set对比后的结果存储在target_set集合当中;

SINTER命令

sinter key1 key2

示例:

redis> sadd my_set hello world v2
3
redis> sadd your_set hello v2 v3
3
redis> sinter my_set your_set
0 v2
1 hello

sinter命令将返回两个集合的交集;

SINTERSTORE命令

sinterstore destination key1 key2

示例:

redis> sinterstore target_set my_set your_set
2
redis> smembers target_set
0 v2
1 hello

SDIFFSTORE命令类似,SINTERSTORE命令也需要一个结果集合target_set来承接两个集合my_setyour_set的交集;

SUNION命令

sunion key1 key2

示例:

redis> sadd my_set hello world v2
3
redis> sadd your_set hello v2 v3
3
redis> sunion my_set your_set
0 hello
1 v2
2 world
3 v3

sunion命令将返回两个集合的并集;

SUNIONSTORE命令

sunionstore destination key1 key2

示例:

redis> sunionstore target_set my_set your_set
4
redis> smembers target_set
0 hello
1 v2
2 world
3 v3

sunionstore命令会将my_setyour_set集合的并集存储到target_set中;

SISMEMBER命令

sismember key value

示例:

redis> sismember my_set v6
0
redis> sismember my_set v2
1

sismember命令是用来判断value是否在集合key当中,上述示例中,集合my_set中包含v2不包含v6,所以第一条命令结果返回0,第二条命令结果返回1;

SMOVE命令

smove source destination value

示例:

redis> smove my_set your_set "world"
1
redis> smembers my_set
0 v2
1 hello
redis> smembers your_set
0 world
1 v3
2 v2
3 hello

smove命令将my_set集合中的world元素移除,并插入到your_set集合中;