Redis基础篇13 — 使用命令(五)对 value 的操作命令

set 数据类型

前面我们提到了 list 链表数据类型,它本质是双向链表,这种数据类型拥有 有序性可重复性 的特性。

set 数据类型与 list 数据类型大致相同,但它拥有 无序性不可重复性(或称 唯一性)的特性,即在 set 数据类型的底层中,其仅存储 key,不存储 value(因为都是 nil)。


                -----------------------------
                |   --------    ---------   |
                |   | key1 |    | (nil) |   |
                |   --------    ---------   |
                |                           |
                |   --------    ---------   |
                |   | key2 |    | (nil) |   |
-------         |   --------    ---------   |
| key |         |                           |
-------         |                           |
                |   --------    ---------   |
                |   | key3 |    | (nil) |   |
                |   --------    ---------   |
                |                           |
                |   --------    ---------   |
                |   | key4 |    | (nil) |   |
                |   --------    ---------   |
                |                           |
                -----------------------------

在 list 数据类型中,每一个数据被称为 元素;但在 set 数据类型中,每一个数据被称为 成员 。每一个 set 数据类型可以容纳 2^32-1 个成员。

sadd 命令

该命令用来向 set 数据类型中添加一个或多个成员。如果 key 不存在,则创建 key ;如果使用 sadd 命令添加一个或多个已经存在的成员,则会添加失败(命令执行后返回 0 )。

192.168.100.3:6379> select 3
OK

192.168.100.3:6379[3]> help sadd

  SADD key member [member ...]
  summary: Adds one or more members to a set. Creates the key if it doesn't exist.
  since: 1.0.0
  group: set

192.168.100.3:6379[3]> sadd department:name IT HR finance logistics
(integer) 4

192.168.100.3:6379[3]> sadd department:name other
(integer) 1

192.168.100.3:6379[3]> sadd department:name other
(integer) 0

smembers 命令

该用来用来查看 set 数据类型中的所有成员。

192.168.100.3:6379[3]> smembers department:name
1) "IT"
2) "HR"
3) "finance"
4) "logistics"
5) "other"

scard 命令

该命令用来查看成员的个数。

192.168.100.3:6379[3]> scard department:name
(integer) 5

sismember 命令

该命令用来判断单个成员是否存在。若成员存在,返回 1 ;若成员不存在,返回 0 。

192.168.100.3:6379[3]> sismember department:name IT
(integer) 1

192.168.100.3:6379[3]> sismember department:name sale
(integer) 0

smove 命令

在同一个库中,针对两个 set 数据类型,将源 key 中的单个成员移动到目标 key 中。

# 创建一个新的 set 数据类型
192.168.100.3:6379[3]> sadd company:name wanmei
(integer) 1

192.168.100.3:6379[3]> smove department:name  company:name IT
(integer) 1

192.168.100.3:6379[3]> smembers company:name
1) "wanmei"
2) "IT"

192.168.100.3:6379[3]> smembers department:name
1) "HR"
2) "finance"
3) "logistics"
4) "other"

srem 命令

该命令用来删除 key 中的一个或多个成员,命令返回的是实际被删除的成员数量。

192.168.100.3:6379[3]> srem department:name other logistics
(integer) 2

192.168.100.3:6379[3]> smembers department:name
1) "HR"
2) "finance"

为了方便后面演示,将删除的数据重新添加:

192.168.100.3:6379[3]> sadd  department:name IT other logistics
(integer) 3

192.168.100.3:6379[3]> smembers department:name
1) "HR"
2) "finance"
3) "IT"
4) "other"
5) "logistics"

srandmember 命令

该命令用来随机获取一个或多个成员。参数 count 是可选的,不键入则默认为 1 。count 可以是正整数和负整数,请注意!指定为负整数后返回的成员可能会有重复。

# 这里的 count 指定为 2
192.168.100.3:6379[3]> srandmember department:name 2
1) "finance"
2) "logistics"

192.168.100.3:6379[3]> srandmember department:name 2
1) "HR"
2) "other

# 如果命令指定的成员数超过了 set 里面的成员数,则会显示所有的成员。
192.168.100.3:6379[3]> srandmember department:name 10
1) "HR"
2) "finance"
3) "IT"
4) "other"
5) "logistics"

# count 为负整数
192.168.100.3:6379[3]> srandmember department:name -10
1) "finance"
2) "finance"
3) "HR"
4) "IT"
5) "IT"
6) "other"
7) "finance"
8) "finance"
9) "logistics"
10) "logistics"

spop 命令

随机弹出 set 数据类型中的一个或多个成员。命令执行后返回的是已经被弹出的成员。参数 count 是可选的,不键入则默认为 1,必须为正整数。如果命令指定的 count 大于了 set 数据类型中的成员数,则会将所有成员弹出,所有成员被弹出后,key 则会被删除。

192.168.100.3:6379[3]> spop department:name 2
1) "IT"
2) "logistics"

192.168.100.3:6379[3]> SMEMBERS department:name
1) "HR"
2) "finance"
3) "other"

# 弹出剩余的 3 个成员,由于没有了成员,因此 department:name 这个 key 被删除
192.168.100.3:6379[3]> spop department:name 3
1) "HR"
2) "finance"
3) "other"

192.168.100.3:6379[3]> keys *
1) "company:name"

与数学集合相关的命令

请注意!这里的集合命令针对的是 2 个或 2 个以上的 key。

交集:两个或多个集合的共有元素所组成的集合。在关系型数据库管理系统中,用在查询语句的 内连接 当中。

交集

并集:将两个或多个集合中的所有元素合并在一起所组成的集合。在关系型数据库管理系统中,用在查询语句的 全连接 当中。

并集

set 数据类型交集所使用的命令为 sinter,将交集的结果保存所使用的命令为 sinterstore

set 数据类型并集所使用的命令为 sunion,将交集的结果保存所使用的命令为 sunionstore

# 添加第一个 set 并拥有 6 个成员
192.168.100.3:6379[3]> sadd test:1 a b c d e f
(integer) 6

192.168.100.3:6379[3]> SMEMBERS test:1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"

# 添加第二个 set 并拥有 7 个成员
192.168.100.3:6379[3]> sadd test:2 c d e f x y z
(integer) 7

192.168.100.3:6379[3]> smembers test:2
1) "c"
2) "d"
3) "e"
4) "f"
5) "x"
6) "y"
7) "z"

# 交集。sinter 命令执行之后返回的是交集结果
192.168.100.3:6379[3]> sinter test:1 test:2
1) "c"
2) "d"
3) "e"
4) "f"
## 保存交集结果到另外一个 key 中
192.168.100.3:6379[3]> sinterstore k1 test:1 test:2
(integer) 4
192.168.100.3:6379[3]> smembers k1
1) "c"
2) "d"
3) "e"
4) "f"

# 并集。sunion 命令执行之后返回的是并集结果
192.168.100.3:6379[3]> sunion test:1 test:2
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "x"
8) "y"
9) "z"
## 保存并集结果到另外一个 key 中
192.168.100.3:6379[3]> sunionstore k2  test:1 test:2
(integer) 9
192.168.100.3:6379[3]> smembers k2
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "x"
8) "y"
9) "z"

sdiff 命令和 sdiffstore 命令

针对两个或多个 key ,返回除共有成员之外的成员,依据 key 输入位置的不同,返回不同的结果。

# 返回 test:1 中除公共成员外的成员
192.168.100.3:6379[3]> sdiff test:1 test:2
1) "a"
2) "b"
## 将差异结果保存到另外一个 key 中
192.168.100.3:6379[3]> sdiffstore k3 test:1 test:2
(integer) 2
192.168.100.3:6379[3]> smembers k3
1) "a"
2) "b"

#  返回 test:2 中除公共成员外的成员
192.168.100.3:6379[3]> sdiff test:2 test:1
1) "x"
2) "y"
3) "z"
## 将差异结果保存到另外一个 key 中
192.168.100.3:6379[3]> sdiffstore k4 test:2 test:1
(integer) 3
192.168.100.3:6379[3]> smembers k4
1) "x"
2) "y"
3) "z"
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇