Day15 Redis应用实战-Set操作

Redis 资料型态Set

  • Set与List概念上类似,最大的差异在於Set是无顺序且key不能重覆。

  • 可用指令

    • SADD
    • SISMEMBER
    • SPOP
    • SRANDMEMBER
    • SREM
    • SMOVE
    • SCARD
    • SMEMBERS
    • SSCAN
    • SINTER
    • SINTERSTORE
    • SUNION
    • SUNIONSTORE
    • SDIFF
    • SDIFFSTORE
  • 资料结构

    • Set如果所有的key value个数 < 512且都是整数值,则使用instest否则使用Hashtable.

SADD

在Set key中加入member.

127.0.0.1:6379> sadd books abc def
(integer) 2

SMEMBERS

取得Set key中所有的member.

127.0.0.1:6379> sadd books abc def
(integer) 2

127.0.0.1:6379> smembers books
1) "def"
2) "abc"

SRANDMEMBER

随机取得Set key中的member数.

# 加入四个member到books key中
127.0.0.1:6379> sadd books abc def ghi jkl
(integer) 4

# 取得books key中所有的member
127.0.0.1:6379> smembers books
1) "ghi"
2) "def"
3) "abc"
4) "jkl"

# 随机取得books key中的任两个member
127.0.0.1:6379> srandmember books 2
1) "def"
2) "jkl"

# 随机取得books key中的任两个member
127.0.0.1:6379> srandmember books 2
1) "def"
2) "jkl"

# 随机取得books key中的任两个member (不同)
127.0.0.1:6379> srandmember books 2
1) "abc"
2) "def"

SREM

删除Set key中的特定member.

127.0.0.1:6379> sadd books abc def ghi jkl
(integer) 4

# 移除books key中的member abc
127.0.0.1:6379> srem books abc
(integer) 1

# 移除books key中的member abc,不存在此member,所以失败
127.0.0.1:6379> srem books abc
(integer) 0

127.0.0.1:6379> smembers books
1) "ghi"
2) "def"
3) "jkl"

SPOP

删除Set key中的随机member数.

127.0.0.1:6379> sadd books abc def ghi jkl
(integer) 4

# 随机删除2个books中的member
127.0.0.1:6379> spop books 2
1) "jkl"
2) "ghi"

127.0.0.1:6379> smembers books
1) "def"
2) "abc"

# 随机删除1个books中的member
127.0.0.1:6379> spop books 1
1) "def"

127.0.0.1:6379> smembers books
1) "abc"

SINTER

取得多个key中member的联集.

127.0.0.1:6379> sadd books abc def
(integer) 2

127.0.0.1:6379> sadd books2 def ghi jkl
(integer) 3

127.0.0.1:6379> smembers books
1) "def"
2) "abc"

127.0.0.1:6379> smembers books2
1) "def"
2) "jkl"
3) "ghi"

127.0.0.1:6379> sinter books books2
1) "def"

SUNION

取得多个key中member的交集.

127.0.0.1:6379> sadd books abc def
(integer) 2

127.0.0.1:6379> sadd books2 def ghi jkl
(integer) 3

127.0.0.1:6379> smembers books
1) "def"
2) "abc"

127.0.0.1:6379> smembers books2
1) "def"
2) "jkl"
3) "ghi"

127.0.0.1:6379> sunion books books2
1) "def"
2) "abc"
3) "ghi"
4) "jkl"

SDIFF

取得多个key中member的差集

127.0.0.1:6379> sadd books abc def
(integer) 2

127.0.0.1:6379> sadd books2 def ghi jkl
(integer) 3

127.0.0.1:6379> smembers books
1) "def"
2) "abc"

127.0.0.1:6379> smembers books2
1) "def"
2) "jkl"
3) "ghi"

# 注意前後key的摆放会影响差集结果
127.0.0.1:6379> sdiff books books2
1) "abc"

# 注意前後key的摆放会影响差集结果
127.0.0.1:6379> sdiff books2 books
1) "ghi"
2) "jkl"

SISMEMBER

判断key中的member是否有符合指定的member.

127.0.0.1:6379> sadd books abc def
(integer) 2

127.0.0.1:6379> smembers books
1) "def"
2) "abc"

# 判断member abc是否有在books key的member中 (有)
127.0.0.1:6379> sismember books abc
(integer) 1

# 判断member ghi是否有在books key的member中 (没有)
127.0.0.1:6379> sismember books ghi
(integer) 0

SMOVE

将某key中的指定member移至目的端key的member中.

127.0.0.1:6379> sadd books abc def
(integer) 2

127.0.0.1:6379> sadd books2 def ghi jkl
(integer) 3

127.0.0.1:6379> smembers books
1) "def"
2) "abc"

127.0.0.1:6379> smembers books2
1) "def"
2) "jkl"
3) "ghi"

# 从books2 key中移动jkl member到books key中
127.0.0.1:6379> smove books2 books jkl
(integer) 1

127.0.0.1:6379> smembers books
1) "def"
2) "abc"
3) "jkl"

127.0.0.1:6379> smembers books2
1) "def"
2) "ghi"

SCARD

取得key中member的总数.

127.0.0.1:6379> sadd books abc def
(integer) 2

127.0.0.1:6379> sadd books2 def ghi jkl
(integer) 3

# books key中有2个member
127.0.0.1:6379> scard books
(integer) 2

# books key中有3个member
127.0.0.1:6379> scard books2
(integer) 3

# 此nobody key不存在,回传0
127.0.0.1:6379> scard nobody
(integer) 0

SSCAN

扫描key中指定member 特定match pattern与次数.

# 取得1个存在books key中member为a开头
127.0.0.1:6379> sscan books 0 match a* 1
1) "0"
2) 1) "abc"

# 取得1个存在books key中member为b开头
127.0.0.1:6379> sscan books 0 match b* 1
1) "0"
2) (empty array)

SINTERSTORE

取得多个key中member的联集,并存入另外一个key中.

127.0.0.1:6379> sadd books abc def
(integer) 2

127.0.0.1:6379> sadd books2 def ghi jkl
(integer) 3

127.0.0.1:6379> smembers books
1) "def"
2) "abc"

127.0.0.1:6379> smembers books2
1) "def"
2) "jkl"
3) "ghi"

127.0.0.1:6379> sinterstore books books2
1) "def"

# 将books key与books2 key中的member联集写入到newbooks key中
127.0.0.1:6379> sinterstore newbooks books books2
(integer) 1

127.0.0.1:6379> smembers newbooks
1) "def"

SUNIONSTORE

取得多个key中member的交集,并存入另外一个key中.

127.0.0.1:6379> sadd books abc def
(integer) 2

127.0.0.1:6379> sadd books2 def ghi jkl
(integer) 3

127.0.0.1:6379> smembers books
1) "def"
2) "abc"

127.0.0.1:6379> smembers books2
1) "def"
2) "jkl"
3) "ghi"

# 将books key与books2 key中的member交集写入到newbooks2 key中
127.0.0.1:6379> sunionstore newbooks2 books books2
(integer) 4

127.0.0.1:6379> smembers newbooks2
1) "def"
2) "abc"
3) "ghi"
4) "jkl"

SDIFFSTORE

取得多个key中member的差集,并存入另外一个key中.

127.0.0.1:6379> sadd books abc def
(integer) 2

127.0.0.1:6379> sadd books2 def ghi jkl
(integer) 3

127.0.0.1:6379> smembers books
1) "def"
2) "abc"

127.0.0.1:6379> smembers books2
1) "def"
2) "jkl"
3) "ghi"

# 将books key与books2 key的member差集写入newbooks3 key中
127.0.0.1:6379> sdiffstore newbooks3 books books2
(integer) 1

127.0.0.1:6379> smembers newbooks3
1) "abc"

# 将books2 key与books key的member差集写入newbooks4 key中
127.0.0.1:6379> sdiffstore newbooks4 books2 books
(integer) 2

127.0.0.1:6379> smembers newbooks4
1) "ghi"
2) "jkl"

<<:  [Day 21] 实作 - 介面篇5

>>:  每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day15

[Day 9] .Net Task 底层(2)

前言 我们昨天聊到要透过解析 threadPool 档案中的 FinishContinuations...

Day36 ATT&CK for ICS - Impact(2)

T0826 Loss of Availability 攻击者尝试破坏工控设备重要的系统或元件,阻止工...

初学者跪着学JavaScript Day15 : 阵列中没被定义的空值(empty item)

一日客语:中文:加油 客语:gaˊ iuˇ 嘎2声U Array:是物件只是做了小调整变成阵列 特性...

01. Laravel x Sail x Mac

Laravel Sail 是 Laravel 8 的新功能,你可以透过 sail 指令来操作内建的 ...