SADD

SADD key member [member …]
可用版本: >= 1.0.0
时间复杂度: O(N), N 是被添加的元素的数量。

将一个或多个member元素加入到集合key当中,已经存在于集合的member元素将被忽略(集合中的元素各不相同)。

演示

key不存在时,会先创建一个空集合,再执行SADD命令将这些member元素加入到空集合中去。SADD命令返回被添加到集合中的新元素的数量,不包括被忽略的元素。

127.0.0.1:6379> exists set
(integer) 0
127.0.0.1:6379> sadd set 1 2 3 4
(integer) 4
127.0.0.1:6379> smembers set
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> sadd set 3 5 2 1 1 6 7 8 9 0
(integer) 6
127.0.0.1:6379> smembers set1) "0"2) "1"3) "2"4) "3"5) "4"6) "5"7) "6"8) "7"9) "8"
10) "9"

key不是集合类型时,返回一个错误。

127.0.0.1:6379> lpush list 1 2 3
(integer) 3
127.0.0.1:6379> sadd list 1
(error) WRONGTYPE Operation against a key holding the wrong kind of value

SISMEMBER

SISMEMBER key member
可用版本: >= 1.0.0
时间复杂度: O(1)

判断member元素是否是集合key中的成员。

演示

如果member元素是集合中的成员,SISMEMBER命令返回1

127.0.0.1:6379> smembers set1) "0"2) "1"3) "2"4) "3"5) "4"6) "5"7) "6"8) "7"9) "8"
10) "9"
127.0.0.1:6379> sismember set 9
(integer) 1

如果member元素不是集合中的成员,或者key不存在,命令则返回0

127.0.0.1:6379> smembers set1) "0"2) "1"3) "2"4) "3"5) "4"6) "5"7) "6"8) "7"9) "8"
10) "9"
127.0.0.1:6379> sismember set 10
(integer) 0
127.0.0.1:6379> exists set2
(integer) 0
127.0.0.1:6379> sismember set2 0
(integer) 0

SPOP

SPOP key [count]
可用版本: >= 1.0.0
时间复杂度: 只提供 key 参数时为 O(1) 。如果提供了 count 参数,那么为 O(N) ,N 为返回数组的元素个数。

移除并返回集合中的一个或多个随机元素,如果你的Redis版本中SPOP命令没有这个可选的count参数,就只能移除并返回集合中的一个随机元素。

演示

key不存在或key是空集合时,SPOP命令返回(nil)。并且当count大于集合成员数量时,会移除并返回集合全部成员。

127.0.0.1:6379> exists set2
(integer) 0
127.0.0.1:6379> spop set2
(nil)
127.0.0.1:6379> sadd set2 1
(integer) 1
127.0.0.1:6379> spop set2 10
1) "1"
127.0.0.1:6379> spop set2
(nil)

其他情况,SPOP命令返回被移除的所有随机元素。

127.0.0.1:6379> smembers set1) "0"2) "1"3) "2"4) "3"5) "4"6) "5"7) "6"8) "7"9) "8"
10) "9"
127.0.0.1:6379> spop set 4
1) "2"
2) "0"
3) "3"
4) "6"
127.0.0.1:6379> smembers set
1) "1"
2) "4"
3) "5"
4) "7"
5) "8"
6) "9"
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> spop set -20
(error) ERR index out of range
127.0.0.1:6379> spop set 0
(empty list or set)

SRANDMEMBER

SRANDMEMBER key [count]
可用版本: >= 1.0.0
时间复杂度: 只提供 key 参数时为 O(1) 。如果提供了 count 参数,那么为 O(N) ,N 为返回数组的元素个数。

如果命令只提供了key参数,那么返回集合中的一个随机元素。

该命令和SPOP命令相似,但SPOP命令是将随机元素从集合中移除并返回,而SRANDMEMBER命令则仅仅返回随机元素,而不对集合进行任何改动。并且在两个命令的演示过程中,也可以发现count参数的效果也有点不一样(正负值)。

演示

只提供key参数时,将返回一个元素;如果集合为空,则返回(nil)

127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> srandmember set
"2"
127.0.0.1:6379> del set
(integer) 1
127.0.0.1:6379> srandmember set
(nil)

如果提供了count参数,那么会返回一个数组;如果集合为空,会返回空数组。

count为正数时,且小于集合基数,那么命令返回一个包含count个元素的数组,并且数组中的元素各不相同。如果count大于等于集合基数,那么会将整个集合做为一个数组进行返回。

127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> srandmember set 1
1) "3"
127.0.0.1:6379> srandmember set 0
(empty list or set)
127.0.0.1:6379> srandmember set 20
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> del set
(integer) 1
127.0.0.1:6379> srandmember set 5
(empty list or set)

count为负数时,命令返回的数组中,元素可能会重复出现多次,而数组的长度为 count的绝对值。

127.0.0.1:6379>  smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> srandmember set -2
1) "5"
2) "5"
127.0.0.1:6379> srandmember set -101) "3"2) "0"3) "9"4) "1"5) "0"6) "3"7) "7"8) "6"9) "2"
10) "3"
127.0.0.1:6379> srandmember set -201) "1"2) "9"3) "2"4) "3"5) "3"6) "8"7) "6"8) "6"9) "7"
10) "1"
11) "9"
12) "7"
13) "2"
14) "5"
15) "5"
16) "1"
17) "3"
18) "9"
19) "2"
20) "6"
127.0.0.1:6379> del set
(integer) 1
127.0.0.1:6379> srandmember set -7
(empty list or set)

SREM

SREM key member [member …]
可用版本: >= 1.0.0
时间复杂度: O(N), N 为给定 member 元素的数量。

移除集合key中的一个或多个member元素,不存在的member元素会被忽略。

演示

SREM命令返回被成功移除的元素的数量,不包括被忽略的元素。

127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> srem set 9 0 10 11 2 4 4 9 0
(integer) 3
127.0.0.1:6379> smembers set
1) "1"
2) "3"
3) "5"
4) "6"
5) "7"
6) "8"
127.0.0.1:6379> del set
(integer) 1
127.0.0.1:6379> srem set 0 1 2 3 4
(integer) 0

key不是集合类型,命令返回一个错误。

127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> srem list 1
(error) WRONGTYPE Operation against a key holding the wrong kind of value

SMOVE

SMOVE source destination member
可用版本: >= 1.0.0
时间复杂度: O(1)

member元素从source集合移动到destination集合,并且这是一个原子命令。

演示

如果source集合不存在或不包含指定的member元素,则SMOVE命令不执行任何操作,仅返回0

127.0.0.1:6379> del set
(integer) 1
127.0.0.1:6379> sadd set 3 5 2 1 1 6 7 8 9 0
(integer) 9
127.0.0.1:6379> del set1
(integer) 0
127.0.0.1:6379> exists set1
(integer) 0
127.0.0.1:6379> smove set1 set 0
(integer) 0
127.0.0.1:6379> sadd set1 0
(integer) 1
127.0.0.1:6379> smove set1 set 1
(integer) 0
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"

否则, member元素从source集合中被移除,并添加到destination集合中去。

127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> smembers set1
1) "0"
2) "10"
127.0.0.1:6379> smove set1 set 10
(integer) 1
127.0.0.1:6379> smembers set1) "0"2) "1"3) "2"4) "3"5) "5"6) "6"7) "7"8) "8"9) "9"
10) "10"
127.0.0.1:6379> smembers set1
1) "0"

而当destination集合已经包含member元素时, SMOVE命令只是简单地将source集合中的member元素删除。

127.0.0.1:6379> smembers set1) "0"2) "1"3) "2"4) "3"5) "5"6) "6"7) "7"8) "8"9) "9"
10) "10"
127.0.0.1:6379> smembers set1
1) "0"
127.0.0.1:6379> smove set1 set 0
(integer) 1
127.0.0.1:6379> smembers set1) "0"2) "1"3) "2"4) "3"5) "5"6) "6"7) "7"8) "8"9) "9"
10) "10"
127.0.0.1:6379> smembers set1
(empty list or set)

sourcedestination不是集合类型时,命令返回一个错误。

SCARD

SCARD key
可用版本: >= 1.0.0
时间复杂度: O(1)

返回集合key的基数(集合中元素的数量)。

演示

key不存在或是空集合时,命令返回0

127.0.0.1:6379> del set1
(integer) 0
127.0.0.1:6379> scard set1
(integer) 0
127.0.0.1:6379> sadd set1 1
(integer) 1
127.0.0.1:6379> spop set1
"1"
127.0.0.1:6379> scard set1
(integer) 0

否则,返回集合的基数。

127.0.0.1:6379> scard set
(integer) 10
127.0.0.1:6379> smembers set1) "0"2) "1"3) "2"4) "3"5) "5"6) "6"7) "7"8) "8"9) "9"
10) "10"

key不是集合类型时,命令返回一个错误。

127.0.0.1:6379> scard list
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
3) "1"

SMEMBERS

SMEMBERS key
可用版本: >= 1.0.0
时间复杂度: O(N), N 为集合的基数。

返回集合key中的所有成员。

演示

不存在的key被视为空集合。

127.0.0.1:6379> exists set1
(integer) 0
127.0.0.1:6379> smembers set1
(empty list or set)
127.0.0.1:6379> sadd set1 90
(integer) 1
127.0.0.1:6379> spop set1
"90"
127.0.0.1:6379> smembers set1
(empty list or set)

key是有成员的集合时,命令返回集合中的所有成员。

127.0.0.1:6379> smembers set1) "0"2) "1"3) "2"4) "3"5) "5"6) "6"7) "7"8) "8"9) "9"
10) "10"
127.0.0.1:6379> scard set
(integer) 10

key不是集合类型时,命令返回一个错误。

127.0.0.1:6379> smembers list
(error) WRONGTYPE Operation against a key holding the wrong kind of value

SSCAN

SSCAN key cursor [MATCH pattern] [COUNT count]
可用版本: >= 2.8.0
时间复杂度:增量式迭代命令每次执行的复杂度为 O(1) , 对数据集进行一次完整迭代的复杂度为 O(N) , 其中 N 为数据集中的元素数量。

SSCAN命令用于增量式迭代集合中的成员。

选项

  • MATCH :MATCH选项为增量式迭代命令提供一个集合中成员的模式参数, 让命令只返回和给定模式参数相匹配的成员, 这一点可以通过在执行增量式迭代命令时, 通过给定MATCH <pattern>参数来实现,在下面会进行演示。
  • COUNT:COUNT选项的作用就是让用户告知迭代命令, 在每次迭代中应该从数据集里返回多少元素。但COUNT选项只是对增量式迭代命令的一种提示(并不一定会遵守)。COUNT参数的默认值为10 。用户可以在每次迭代中按自己的需要随意改变COUNT参数的值, 只要记得将上次迭代返回的游标用到下次迭代里面就可以了。

演示

SSCAN命令是一个基于游标的迭代器,SSCAN命令每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为SSCAN命令的游标参数, 以此来延续之前的迭代过程。

当SSCAN命令的游标参数被设置为0时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为0的游标时, 表示迭代已结束。

127.0.0.1:6379> smembers set1) "0"2) "1"3) "2"4) "3"5) "5"6) "6"7) "7"8) "8"9) "9"
10) "10"
11) "11"
12) "12"
13) "13"
14) "14"
15) "15"
16) "16"
17) "17"
18) "18"
19) "19"
20) "20"
21) "21"
22) "22"
23) "23"
127.0.0.1:6379> sscan set 0
1) "0"
2)  1) "0"2) "1"3) "2"4) "3"5) "5"6) "6"7) "7"8) "8"9) "9"10) "10"11) "11"12) "12"13) "13"14) "14"15) "15"16) "16"17) "17"18) "18"19) "19"20) "20"21) "21"22) "22"23) "23"

使用MATCH选项。

sscan set 0 match 2*
127.0.0.1:6379> sscan set 0 match 2*
1) "0"
2) 1) "2"2) "20"3) "21"4) "22"5) "23"

使用COUNT选项(其实是不起作用的)。

127.0.0.1:6379> sscan set 0 match 1* count 5
1) "0"
2)  1) "1"2) "10"3) "11"4) "12"5) "13"6) "14"7) "15"8) "16"9) "17"10) "18"11) "19"

和之前介绍过的HSCAN命令是类似的:Redis - 哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍。

所以这也说明了,COUNT选项只是对增量式迭代命令的一种提示(并不一定会遵守)。

Redis中集合的SADD、SISMEMBER、SPOP、SRANDMEMBER、SREM、SMOVE、SCARD、SMEMBERS、SSCAN命令就介绍到这里。

写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!

Redis:集合SADD、SISMEMBER、SPOP、SRANDMEMBER、SREM、SMOVE、SCARD、SMEMBERS、SSCAN命令介绍相关推荐

  1. Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍

    HLEN HLEN key 时间复杂度:O(1) 返回哈希表key中域的数量. 演示 当哈希表key不存在时,返回 0. HSTRLEN HSTRLEN key field 可用版本:>= 3. ...

  2. redis之sadd、srem、spop、sdiff、sdiffstore、sinter、 sinterstore、sunion、sunionstore、smove、scard、sismember

    1.sadd 向名称为 key 的 set 中添加元素 redis 127.0.0.1:6379> sadd myset "hello" (integer) 1 redis ...

  3. redis 集合操作

    2019独角兽企业重金招聘Python工程师标准>>> SADD key member 将member元素加入到集合key当中. 如果member元素已经是该集合的成员,那SADD命 ...

  4. C#Redis集合set

    快过年了,任务也没那么多了,可以有时间了解下其他的内容,今天看到一个博客关于weex的,觉得还挺实用的,等有空了可以了解了解.不过还是把今年的目标要完成.今天继续redis. 一.前戏 在Redis中 ...

  5. Redis 命令--Redis集合(Set)

    Redis集合(Set) Redis 的 Set 是 String 类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中集合是通过哈希表实现的,所以添加,删除,查找的 ...

  6. Redis 集合(Set)

    Redis 集合(Set) Redis的Set是string类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度 ...

  7. Redis 集合处理

    学习了列表之后,发现了Redis处理字符串的功能强大. 为了适应不同场景的需求,还有一个用的很多的就是集合. Redis提供的集合支持的类型是字符串.并且集合中的元素值是唯一的,也就是说不能出现重复数 ...

  8. Redis学习---(10)Redis 集合(Set)

    Redis 集合(Set) Redis 的 Set 是 String 类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中集合是通过哈希表实现的,所以添加,删除,查找 ...

  9. redis linux 删除数据结构,Redis集合数据结构和常用命令

    Redis 的集合不是一个线性结构,而是一个哈希表结构,它的内部会根据 hash 分子来存储和查找数据,理论上一个集合可以存储 2 的 32 次方减 1 个节点(大约 42 亿)个元素,因为采用哈希表 ...

最新文章

  1. python网络爬虫初识_python爬虫(一)初识爬虫
  2. 我的puppet web 管理,彻底告别终端模式
  3. ASP.NET Core 2.0 使用支付宝PC网站支付
  4. 机房冷热通道系统整体解决方案
  5. 贫穷中透着零基础的单人制作游戏手册之一:怎么开局
  6. python qtdesigner安装,PyCharm+Qt Designer+PyUIC安装配置教程详解
  7. NClay框架MVC应用入门
  8. 正则表达式匹配减号_THOR断点教程0910 网球规则1112 后附常用正则表达式数据...
  9. Python基础(十八): 类和对象以及它们的属性
  10. spring boot初体验(三)Spring AOP
  11. 朗沃20140414
  12. Python代码测试 - unitest\doctest\nose\pytest
  13. [ZT]如何实现打印输出到Adobe PDF格式文件
  14. 项目汇报模板—再也不怕撕逼了
  15. VS2013配置OpenGL
  16. 服务器被入侵了,怎么防范服务器被黑客入侵情况
  17. ps怎么创建双曲线图层如何添加
  18. linux去除文件中重复行,Linux Shell教程 - 如何删除重复的文本行
  19. STATA闪退,CLDS数据无法转码
  20. 免费高清视频素材下载网站

热门文章

  1. 微信小程序云开发之云数据库查询及动态输入
  2. 尚融宝——阿里云短信验证功能(sms)
  3. 记录docker自定义easyswoole镜像
  4. (2017中国数字化贡献人物专访)线上蓝光、数字蓝光:助力蓝光弯道超车
  5. 阿里云云计算ACP学习(七)---弹性伸缩服务AS
  6. 最全的 explain解释
  7. 幻数 linux_查找第n个幻数
  8. 不要盲目满足用户需求,造成过度设计
  9. python logging配置时间或大小轮转
  10. WebRTC 源码分析