redis 集合操作

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-02 11:40:14

SADD key member


将member元素加入到集合key当中。


如果member元素已经是该集合的成员,那SADD命令不执行任何操作。

假如key不存在,则创建一个只包含member元素作成员的集合。

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


时间复杂度:

    O(1)

返回值:

    如果添加元素成功,返回1。

    如果元素已经是集合的成员,返回0。


 

Redis代码  收藏代码

  1. <span style="font-size: small;">redis> SADD bbs "v2ex.com"  

  2. (integer) 1  

  3. redis> SADD bbs "codecompo.com"  

  4. (integer) 1  

  5.   

  6. redis> SMEMBERS bbs     # 显示bbs集合中所有成员  

  7. 1"codecompo.com"  

  8. 2"v2ex.com"  

  9.   

  10. redis> SADD bbs "v2ex.com"  # 尝试添加重复元素,返回0  

  11. (integer) 0</span>  

 




SINTER key [key ...]


返回一个集合的全部成员,该集合是所有给定集合的交集。


不存在的key被视为空集。

当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。


时间复杂度:

    O(N * M),N为给定集合当中基数最小的集合,M为给定集合的个数。

返回值:

    交集成员的列表。


 

Redis代码  收藏代码

  1. <span style="font-size: small;">redis> SMEMBERS group_1  

  2. 1"LI LEI"  

  3. 2"TOM"  

  4. 3"JACK"   # <-  

  5.   

  6. redis> SMEMBERS group_2  

  7. 1"HAN MEIMEI"  

  8. 2"JACK"   # <-  

  9.   

  10. redis> SINTER group_1 group_2  

  11. 1"JACK"</span>  

 

 

 


SMOVE source destination member

 

将member元素从source集合移动到destination集合。

 

SMOVE是原子性操作。

如果source集合不存在或不包含指定的member元素,则SMOVE命令不执行任何操作,仅返回0。否则,member元素从source集合中被移除,并添加到destination集合中去。

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

当source或destination不是集合类型时,返回一个错误。

 

复杂度:

    O(1)

返回值:

    如果member元素被成功移除,返回1。

    如果member元素不是source集合的成员,并且没有任何操作对destination集合执行,那么返回0。

 

 

Redis代码  收藏代码

  1. redis> SMEMBERS songs  

  2. 1"Billie Jean"  

  3. 2"Believe Me"  

  4.   

  5. redis> SMEMBERS my_songs  

  6. (empty list or set)  

  7.   

  8. redis> SMOVE songs my_songs "Believe Me"  

  9. (integer) 1  

  10.   

  11. redis> SMEMBERS songs  

  12. 1"Billie Jean"  

  13.   

  14. redis> SMEMBERS my_songs  

  15. 1"Believe Me"  

 

 


SUNION key [key ...]

 

返回一个集合的全部成员,该集合是所有给定集合的并集。

 

不存在的key被视为空集。

 

复杂度:

    O(N),N是所有给定集合的成员数量之和。

返回值:

    并集成员的列表。

 

 

Redis代码  收藏代码

  1. redis> SMEMBERS songs  

  2. 1"Billie Jean"  

  3.   

  4. redis> SMEMBERS my_songs  

  5. 1"Believe Me"  

  6.   

  7. redis> SUNION songs my_songs  

  8. 1"Billie Jean"  

  9. 2"Believe Me"  

 

 


SCARD key

 

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

 

复杂度:

    O(1)

返回值:

    集合的基数。

    当key不存在时,返回0。

 

 

Redis代码  收藏代码

  1. redis> SMEMBERS tool  

  2. 1"pc"  

  3. 2"printer"  

  4. 3"phone"  

  5.   

  6. redis> SCARD tool  

  7. (integer) 3  

  8.   

  9. redis> SMEMBERS fake_set  

  10. (empty list or set)  

  11.   

  12. redis> SCARD fake_set  

  13. (integer) 0  

 

 


SINTERSTORE destination key [key ...]

 

此命令等同于SINTER,但它将结果保存到destination集合,而不是简单地返回结果集。

 

如果destination集合已经存在,则将其覆盖。

 

时间复杂度:

    O(N * M),N为给定集合当中基数最小的集合,M为给定集合的个数。

返回值:

    结果集中的元素数量。

 

 

Redis代码  收藏代码

  1. redis> SMEMBERS songs  

  2. 1"good bye joe"   # <-  

  3. 2"hello,peter"  

  4.   

  5. redis> SMEMBERS my_songs  

  6. 1"good bye joe"   # <-  

  7. 2"falling"  

  8.   

  9. redis> SINTERSTORE song_and_my_song songs my_songs  

  10. (integer) 1  

  11.   

  12. redis> SMEMBERS song_and_my_song  

  13. 1"good bye joe"  

 

 


SPOP key

 

移除并返回集合中的一个随机元素。

 

复杂度:

    O(1)

返回值:

    被移除的随机元素。

    当key不存在或key是空集时,返回nil。

 

 

Redis代码  收藏代码

  1. redis> SMEMBERS my_sites  

  2. 1"huangz.iteye.com"  

  3. 2"sideeffect.me"  

  4. 3"douban.com/people/i_m_huangz"  

  5.   

  6. redis> SPOP my_sites  

  7. "huangz.iteye.com"  

  8.   

  9. redis> SMEMBERS my_sites  

  10. 1"sideeffect.me"  

  11. 2"douban.com/people/i_m_huang"  

 

 


SUNIONSTORE destination key [key ...]

 

此命令等同于SUNION,但它将结果保存到destination集合,而不是简单地返回结果集。

 

如果destination已经存在,则将其覆盖。

 

复杂度:

    O(N),N是所有给定集合的成员数量之和。

返回值:

    结果集中的元素数量。

 

 

Redis代码  收藏代码

  1. redis> SMEMBERS ms_sites  

  2. 1"microsoft.com"  

  3. 2"skype.com"  

  4.   

  5. redis> SMEMBERS google_sites  

  6. 1"youtube.com"  

  7. 2"google.com"  

  8.   

  9. redis> SUNIONSTORE google_and_ms_sites ms_sites google_sites  

  10. (integer) 4  

  11.   

  12. redis> SMEMBERS google_and_ms_sites  

  13. 1"microsoft.com"  

  14. 2"skype.com"  

  15. 3"google.com"  

  16. 4"youtube.com"  

 

 


SDIFF key [key ...]

 

返回一个集合的全部成员,该集合是第一个给定集合和其他所有给定集合的差集 。

 

不存在的key被视为空集。

 

复杂度:

    O(N),N是所有给定集合的成员数量之和。

返回值:

    交集成员的列表。

 

 

Redis代码  收藏代码

  1. redis> SMEMBERS peter's_movies  

  2. 1"bet man"  

  3. 2"start war"  

  4. 3"2012"   # <-  

  5.   

  6. redis> SMEMBERS joe's_movies  

  7. 1"hi, lady"  

  8. 2"Fast Five"  

  9. 3"2012"   # <-  

  10.   

  11. redis> SDIFF peter's_movies joe's_movies  

  12. 1"bet man"  

  13. 2"start war"  

 

 


SISMEMBER key member

 

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

 

时间复杂度:

    O(1)

返回值:

    如果member元素是集合的成员,返回1。

    如果member元素不是集合的成员,或key不存在,返回0。

 

 

Redis代码  收藏代码

  1. redis> SMEMBERS joe's_movies  

  2. 1"hi, lady"  

  3. 2"Fast Five"  

  4. 3"2012"  

  5.   

  6. redis> SISMEMBER joe's_movies "bet man"  

  7. (integer) 0  

  8.   

  9. redis> SISMEMBER joe's_movies "Fast Five"  

  10. (integer) 1  

 

 


SRANDMEMBER key

 

返回集合中的一个随机元素。

 

该操作和SPOP相似,但SPOP将随机元素从集合中移除并返回,而SRANDMEMBER则仅仅返回随机元素,而不对集合进行任何改动。

 

时间复杂度:

    O(1)

返回值:

    被选中的随机元素。 当key不存在或key是空集时,返回nil。

 

 

Redis代码  收藏代码

  1. redis> SMEMBERS joe's_movies  

  2. 1"hi, lady"  

  3. 2"Fast Five"  

  4. 3"2012"  

  5.   

  6. redis> SRANDMEMBER joe's_movies  

  7. "Fast Five"  

  8.   

  9. redis> SMEMBERS joe's_movies    # 集合中的元素不变  

  10. 1"hi, lady"  

  11. 2"Fast Five"  

  12. 3"2012"  

 

 


SDIFFSTORE destination key [key ...]

 

此命令等同于SDIFF,但它将结果保存到destination集合,而不是简单地返回结果集。

 

如果destination集合已经存在,则将其覆盖。

 

复杂度:

    O(N),N是所有给定集合的成员数量之和。

返回值:

    结果集中的元素数量。

 

 

Redis代码  收藏代码

  1. redis> SMEMBERS joe's_movies  

  2. 1"hi, lady"  

  3. 2"Fast Five"  

  4. 3"2012"  

  5.   

  6. redis> SMEMBERS peter's_movies  

  7. 1"bet man"  

  8. 2"start war"  

  9. 3"2012"  

  10.   

  11. redis> SDIFFSTORE joe_diff_peter joe's_movies peter's_movies  

  12. (integer) 2  

  13.   

  14. redis> SMEMBERS joe_diff_peter  

  15. 1"hi, lady"  

  16. 2"Fast Five"  

 

 

 

SMEMBERS key

 

返回集合中的所有成员。

 

时间复杂度:

    O(N),N为集合的基数。

返回值:

    集合中的所有成员。

 

 

Redis代码  收藏代码

  1. redis> SMEMBERS prog_lang  

  2. 1"c"  

  3. 2"ruby"  

  4. 3"python"  

 

 


SREM key member

 

移除集合中的member元素。

 

如果member元素不是集合中的成员,则SREM命令不执行任何操作。

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

时间复杂度:

    O(1)

返回值:

    如果移除元素成功,返回1。

    如果member元素不是集合成员,返回0。

 

 

Redis代码  收藏代码

  1. redis> SMEMBERS prog_lang  

  2. 1"c"  

  3. 2"ruby"  

  4. 3"python"  

  5.   

  6. redis> SREM prog_lang "c"  

  7. (integer) 1  

  8.   

  9. redis> SMEMBERS prog_lang  

  10. 1"ruby"  

  11. 2"python"  

  12.   

  13. redis> SREM prog_lang "scheme"  

  14. (integer) 0  

  15.   

  16. redis> SMEMBERS prog_lang  

  17. 1"ruby"  

  18. 2"python"  

   


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!