Redis 集合(Set)

Redis 的 Set(集合)是 string(字符串)类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 的集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。因此,可以使用 Redis 的 Set(集合)高效地做如下事情:

(1)跟踪唯一项目(例如,跟踪访问给定博客文章的所有唯一IP地址)

(2)表示关系(例如,具有给定角色的所有用户的集合)

(3)执行常见的集合操作,如交集、并集和差集

注意:集合中最大的成员数为 2^32 - 1 (4294967295,每个集合可存储 40 多亿个成员)。大多数集合操作,包括添加、删除和检查项是否为集合成员,都是 O(1),这意味着他们的效率很高。但是,对于具有数十万或更多成员的大型集合,在运行 SMEMBERS 命令时应谨慎。此命令为 O(n),并在单个响应中返回整个集合。作为替代方案,考虑 SSCAN,它允许您迭代检索集合的所有成员。

实例

(1)存储用户 123 和 456 的收藏图书ID集,如下:

127.0.0.1:6379> SADD user:123:favorites 347
(integer) 1
127.0.0.1:6379> SADD user:123:favorites 561
(integer) 1
127.0.0.1:6379> SADD user:123:favorites 742
(integer) 1
127.0.0.1:6379> SADD user:456:favorites 561
(integer) 1

(2)检查用户 123 是否喜欢图书 742 和 299,如下:

127.0.0.1:6379> SISMEMBER user:123:favorites 742
(integer) 1
127.0.0.1:6379> SISMEMBER user:123:favorites 299
(integer) 0

(3)用户 123 和 456 有共同喜欢的书吗?

127.0.0.1:6379> SINTER user:123:favorites user:456:favorites
1) "561"

(4)用户 123 偏爱了多少本书?

127.0.0.1:6379> SCARD user:123:favorites
(integer) 3

Redis集合命令

下面列出了 Redis 集合基本命令。

SADD命令

向集合添加一个或多个成员。语法如下:

SADD key member1 [member2]

实例:

127.0.0.1:6379> sadd set:mykey 100 200 200 300
(integer) 3
127.0.0.1:6379> smembers set:mykey
1) "100"
2) "200"
3) "300"

SCARD命令

获取集合的成员数。语法如下:

SCARD key

实例:

127.0.0.1:6379> sadd set:mykey 100 200 200 300
(integer) 3
127.0.0.1:6379> scard set:mykey
(integer) 3

SDIFF命令

返回第一个集合与其他集合之间的差异。语法如下:

SDIFF key1 [key2]

实例:

127.0.0.1:6379> sadd set:key1 100 200 300
(integer) 3
127.0.0.1:6379> sadd set:key2 100 200
(integer) 2
127.0.0.1:6379> sdiff set:key1 set:key2
1) "300"

SDIFFSTORE命令

返回给定所有集合的差集并存储在 destination 中。语法如下:

SDIFFSTORE destination key1 [key2]

实例:

127.0.0.1:6379> sadd set:key1 100 200 300
(integer) 3
127.0.0.1:6379> sadd set:key2 100 200
(integer) 2
127.0.0.1:6379> sdiffstore set:result set:key1 set:key2
(integer) 1
127.0.0.1:6379> smembers set:result
1) "300"

SINTER命令

返回给定所有集合的交集。语法如下:

SINTER key1 [key2]

实例:

127.0.0.1:6379> sadd set:key1 100 200 300
(integer) 3
127.0.0.1:6379> sadd set:key2 100 200
(integer) 2
127.0.0.1:6379> sinter set:key1 set:key2
1) "100"
2) "200"

SINTERSTORE命令

返回给定所有集合的交集并存储在 destination 中。语法如下:

SINTERSTORE destination key1 [key2]

实例:

127.0.0.1:6379> sadd set:key1 100 200 300
(integer) 3
127.0.0.1:6379> sadd set:key2 100 200
(integer) 2
127.0.0.1:6379> sinterstore set:result set:key1 set:key2
(integer) 2
127.0.0.1:6379> smembers set:result
1) "100"
2) "200"

SISMEMBER命令

判断 member 元素是否是集合 key 的成员。语法如下:

SISMEMBER key member

实例:

127.0.0.1:6379> smembers set:mykey
1) "100"
2) "200"
3) "300"
127.0.0.1:6379> sismember set:mykey 200
(integer) 1
127.0.0.1:6379> sismember set:mykey 400
(integer) 0

SMEMBERS命令

返回集合中的所有成员。语法如下:

SMEMBERS key

实例:

127.0.0.1:6379> sadd set:mykey 100 200 300
(integer) 3
127.0.0.1:6379> smembers set:mykey
1) "100"
2) "200"
3) "300"

SMOVE命令

将 member 元素从 source 集合移动到 destination 集合。语法如下:

SMOVE source destination member

实例:

127.0.0.1:6379> smembers set:key1
1) "100"
2) "200"
3) "300"
127.0.0.1:6379> smembers set:key2
1) "100"
2) "200"
127.0.0.1:6379> smove set:key1 set:key2 300
(integer) 1
127.0.0.1:6379> smembers set:key2
1) "100"
2) "200"
3) "300"

SPOP命令

移除并返回集合中的一个随机元素。语法如下:

SPOP key

实例:

127.0.0.1:6379> smembers set:mykey
1) "100"
2) "200"
3) "300"
127.0.0.1:6379> spop set:mykey 1
1) "100"
127.0.0.1:6379> smembers set:mykey
1) "200"
2) "300"

SRANDMEMBER命令

返回集合中一个或多个随机数。语法如下:

SRANDMEMBER key [count]

实例:

127.0.0.1:6379> smembers set:mykey
1) "100"
2) "200"
3) "300"
127.0.0.1:6379> srandmember set:mykey 1
1) "200"
127.0.0.1:6379> smembers set:mykey
1) "100"
2) "200"
3) "300"

SREM命令

移除集合中一个或多个成员。语法如下:

SREM key member1 [member2]

实例:

127.0.0.1:6379> smembers set:mykey
1) "100"
2) "200"
3) "300"
127.0.0.1:6379> srem set:mykey 100 300
(integer) 2
127.0.0.1:6379> smembers set:mykey
1) "200"

SUNION命令

返回所有给定集合的并集。语法如下:

SUNION key1 [key2]

实例:

127.0.0.1:6379> smembers set:key1
1) "100"
2) "200"
127.0.0.1:6379> smembers set:key2
1) "100"
2) "200"
3) "300"
127.0.0.1:6379> sunion set:key1 set:key2
1) "100"
2) "200"
3) "300"

SUNIONSTORE命令

所有给定集合的并集存储在 destination 集合中。语法如下:

SUNIONSTORE destination key1 [key2]

实例:

127.0.0.1:6379> smembers set:key1
1) "100"
2) "200"
127.0.0.1:6379> smembers set:key2
1) "100"
2) "200"
3) "300"
127.0.0.1:6379> sunionstore set:result set:key1 set:key2
(integer) 3
127.0.0.1:6379> smembers set:result
1) "100"
2) "200"
3) "300"

SSCAN命令

迭代集合中的元素。语法如下:

SSCAN key cursor [MATCH pattern] [COUNT count]

实例:

127.0.0.1:6379> sadd set:mykey "google.com" "baidu.com" "ping.com" "oracle.com"
(integer) 4
127.0.0.1:6379> smembers set:mykey
1) "ping.com"
2) "baidu.com"
3) "google.com"
4) "oracle.com"
127.0.0.1:6379> sscan set:mykey 0 match "*g*"
1) "0"
2) 1) "google.com"
  2) "ping.com"

更多命令请访问 https://redis.io/commands 进行参考。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号