博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis 基础命令 --- Set篇
阅读量:2429 次
发布时间:2019-05-10

本文共 3763 字,大约阅读时间需要 12 分钟。

实验环境

操作系统: ubuntu-16.04-x64redis版本: 4.0.9

概述

Set又名为集合,集合中的元素具有唯一性,每个元素都是不同的,且没有顺序。一个集合类型的键可以存储至多2^32 - 1个字段。

集合类型的常用操作是向集合中加入或删除,判断某个元素是否存在等,由于集合类型在redis内部使用值为空的散列表实现的,所以这些操作的时间复杂度都是O(1)。

命令

1.增加/删除元素

SADD key member [member ...]SREM key member [member ...]

SADD命用来向集合中增加一个或多个元素,如果键不存在则自动创建。因为集合元素具有唯一性。本命令返回成功加入的元素数量。

例:

127.0.0.1:6379> SADD set1 a (integer) 1127.0.0.1:6379> SADD set1 a  b c(integer) 2

SREM用来删除一个或多个元素,并返回删除成功的个数。

127.0.0.1:6379> SADD set1 a  b c (integer) 3127.0.0.1:6379> SREM set1 c d (integer) 1

2.获得集合中的所有元素

SMEMBERS key

例:

127.0.0.1:6379> SADD set1 a b c d(integer) 4127.0.0.1:6379> SMEMBERS set11) "d"2) "c"3) "b"4) "a"

3.判断元素是否在集合中

SISMEMBER key member

当值存在时返回1,否则返回0。

例:

127.0.0.1:6379> SADD set1 a b c d (integer) 4127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> SISMEMBER set1 a(integer) 1127.0.0.1:6379> SISMEMBER set1 e(integer) 0

4.集合间运算

SDIFF key [key ...]SINTER key [key ...]SUNION key [key ...]

SDIFF命令用来对多个集合执行差集运算。集合A与集合B的差集表示为A - B,代表所有属于A且不属于B的元素构成的集合,即A - B = {e | e∈A 且 e ∉ B}。例如:

{1,2,3} - {2,3,4} = {1}
{2,3,4} - {1,2,3} = {4}
例:

127.0.0.1:6379> SADD set1 1 2 3(integer) 3127.0.0.1:6379> SADD set2 2 3 4(integer) 3127.0.0.1:6379> SDIFF set1 set21) "1"127.0.0.1:6379> SDIFF set2 set11) "4"

SDIFF命令支持同时传入多个键。例如:

127.0.0.1:6379> SADD set1 1 2 3(integer) 3127.0.0.1:6379> SADD set2 2 3 4(integer) 3127.0.0.1:6379> SADD set3 2 3(integer) 2127.0.0.1:6379> SDIFF set1 set2 set31) "1"#计算顺序是先计算set1 - set2 ,然后再计算与set3的差集

SINTER命令用来对多个集合执行交集运算。集合A与集合B的交集表示为A∩B,代表属于A且属于B的元素构成的集合,即

A ∩ B = {e | e ∈ A 且 e ∈ B}。例如:
{1,2,3} {2,3,4} = {2,3}
例:

127.0.0.1:6379> SADD set1 1 2 3(integer) 3127.0.0.1:6379> SADD set2 2 3 4(integer) 3127.0.0.1:6379> SINTER set1 set21) "2"2) "3"

SINTER命令同样支持同时传入多个键。

127.0.0.1:6379> SADD set1 1 2 3(integer) 3127.0.0.1:6379> SADD set2 2 3 4(integer) 3127.0.0.1:6379> SADD set3 2 7(integer) 2127.0.0.1:6379> SINTER set1 set2 set3 1) "2"

SUNION命令用来对多个集合执行并集操作。集合A与集合B的并集表示为A∪B,代表所有属于A或属于B的元素构成的集合,即A∪B = { e | e ∈ A 或 e ∈ B }。例如:

{1,2,3} ∪ {2,3,4} = {1,2,3,4}
例:

127.0.0.1:6379> SADD set1 1 2 3(integer) 3127.0.0.1:6379> SADD set2 2 3 4(integer) 3127.0.0.1:6379> SUNION set1 set21) "1"2) "2"3) "3"4) "4"

SUNION 命令同样支持同时传入多个键,例如:

127.0.0.1:6379> SADD set1 1 2 3(integer) 3127.0.0.1:6379> SADD set2 2 3 4(integer) 3127.0.0.1:6379> SADD set3 3 4 5(integer) 3127.0.0.1:6379> SUNION set1 set2 set3 1) "1"2) "2"3) "3"4) "4"5) "5"

5.获得集合元素个数

SCARD key

例:

127.0.0.1:6379> SADD set1 1 2 3 4(integer) 4127.0.0.1:6379> SCARD set1(integer) 4

6.进行集合运算并将结果存储

SDIFFSTORE destination key [key ...]SINTERSTORE destination key [key ...]SUNIONSTORE destination key [key ...]

SDIFFSTORE 命令和SDIFF命令功能一样,唯一的区别是前者不会直接返回运算结果,而是将结果存储在destination键中。

例:

127.0.0.1:6379> SADD set1 1 2 3 4(integer) 4127.0.0.1:6379> SADD set2 2 3 45(integer) 3127.0.0.1:6379> SDIFFSTORE set3 set1 set2 (integer) 2127.0.0.1:6379> SMEMBERS set3 1) "1"2) "4"

SINTERSTORE和SUNIONSTORE 命令与之类似。

7.随机获得集合中的元素

SRANDMEMBER key [count]

SRANDMEMBER命令用来随机从集合中获取元素,根据count参数的不同,具体表现也不同。

(1)当count为正数时,SRANDMEMBER会随机从集合里获得count个不重复的元素,如果count的值大于集合中的元素个数,则SRANDMEMBER会返回集合中的全部元素。

127.0.0.1:6379> SADD set1 a b c d e(integer) 5127.0.0.1:6379> SRANDMEMBER set1 21) "b"2) "e"127.0.0.1:6379> SRANDMEMBER set1 101) "b"2) "a"3) "d"4) "c"5) "e"

(2)当count为负数时,SRANDMEMBER会随机从集合里获得| count |个元素,这些元素有可能相同。

127.0.0.1:6379> SADD set1 a b c d e(integer) 5127.0.0.1:6379> SRANDMEMBER set1 -3 1) "b"2) "c"3) "b"127.0.0.1:6379> SRANDMEMBER set1 -10 1) "c" 2) "b" 3) "b" 4) "c" 5) "c" 6) "e" 7) "b" 8) "c" 9) "c"10) "e"

8.从集合中弹出一个元素或多个元素

SPOP key [count]

SPOP命令的作用与LPOP类似,但由于集合类型元素的无序性,所以SPOP命令会从集合中随机选择count个元素弹出。

例:

127.0.0.1:6379> SADD set1 1 2 3(integer) 3127.0.0.1:6379> SPOP set1 "1"127.0.0.1:6379> SADD set1 1 2 3(integer) 3127.0.0.1:6379> SPOP set1 21) "3"2) "2"

转载地址:http://ogcmb.baihongyu.com/

你可能感兴趣的文章
怎样以程序员的方式来用百度呢?
查看>>
程序员是如何运用增长思维找到女朋友?
查看>>
@程序员,离职让企业损失近900亿,还遭疯抢!他凭什么?
查看>>
如何用 Python 一键查房价?
查看>>
累死累活干不过写 PPT 的?新东方年会吐槽视频俞敏洪不罚反奖 12 万!
查看>>
“离开360时,它只给了我一块钱”
查看>>
PDF 翻译神器,再也不担心读不懂英文 Paper 了
查看>>
漫话:如何给女朋友解释什么是RPC
查看>>
@程序员,为什么别人比你优秀?!
查看>>
你的红包狂欢夜,互联网巨头们的流量争夺战
查看>>
春晚过去 4 天了,你卸载百度 APP 了吗?
查看>>
中国移动互联网十年
查看>>
面试官问:请拿出一段体现你水平的代码,我该如何回答?
查看>>
@程序员,沟通这项核心技能你掌握了多少?
查看>>
2019,九问联想贺志强
查看>>
你可以忍受大城市 365 天的孤独,却不能忍受小城市 7 天的热闹
查看>>
35 岁程序员,年后第一天被辞退
查看>>
情人节她说:是的,嫁人当嫁程序员
查看>>
骚操作!代码写情诗 | 程序员有话说
查看>>
小程序卡卡卡?用这个方法后,渲染速度提升三倍!
查看>>