sets类型及操作

Set是集合,它是string类型的无序集合。set是通过hash
table实现的,添加,删除和查找复杂度都是0(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blog的tag功能。

sadd:向集合中添加一个元素,通名称为key的set中添加元素。

[toto@localhost bin]$ ./redis-cli

127.0.0.1:6379> sadd myset1 one

(integer) 1

127.0.0.1:6379> sadd myset1 two

(integer) 1

127.0.0.1:6379> sadd myset1 two    
再次添加的时候添加不成功了。

(integer) 0

127.0.0.1:6379>

通过smembers查看集合中有哪些元素

127.0.0.1:6379> smembers myset1

1) "two"

2) "one"

127.0.0.1:6379>

srem:删除名称为key的set中的元素,删除成功返回1,删除失败返回0

127.0.0.1:6379> smembers myset2

1) "two"

2) "one"

3) "three"

127.0.0.1:6379> srem myset2 two

(integer) 1

127.0.0.1:6379> srem myset2 two

(integer) 0

127.0.0.1:6379> smembers myset2

1) "one"

2) "three"

127.0.0.1:6379>

spop:无法指定弹出元素,是随机返回并删除名称为key的set中一个元素。

127.0.0.1:6379> sadd myset3 one

(integer) 1

127.0.0.1:6379> sadd myset3 two

(integer) 1

127.0.0.1:6379> sadd myset3 three

(integer) 1

127.0.0.1:6379> sadd myset3 four

(integer) 1

127.0.0.1:6379> sadd myset3 five

(integer) 1

127.0.0.1:6379> smembers myset3

1) "four"

2) "three"

3) "one"

4) "two"

5) "five"

127.0.0.1:6379> spop myset3    
//随机弹出的是three

"three"

127.0.0.1:6379> smembers myset3

1) "one"

2) "four"

3) "five"

4) "two"

127.0.0.1:6379> spop myset3  
//随机弹出的是four

"four"

127.0.0.1:6379> smembers myset3

1) "one"

2) "five"

3) "two"

127.0.0.1:6379>

sdiff:两个集合的差集。

返回所有给定key与第一个key的差集。

127.0.0.1:6379> smembers myset3

1) "one"

2) "four"

3) "five"

4) "two"

127.0.0.1:6379> spop myset3

"four"

127.0.0.1:6379> smembers myset3

1) "one"

2) "five"

3) "two"

127.0.0.1:6379> sadd myset2 three

(integer) 1

127.0.0.1:6379> sadd myset2 four

(integer) 1

127.0.0.1:6379> sadd myset2 one

(integer) 1

127.0.0.1:6379> smembers myset2

1) "one"

2) "four"

3) "three"

127.0.0.1:6379> sdiff myset2 myset3   
//去除myset2中含有与myset3元素的值。

1) "three"

2) "four"

127.0.0.1:6379>

sdiffstore:返回所有给定key与第一个key的差集,并将结果存为另一个key.

sdiffstore myset4 myset2 myset3表示的意思是将myset3和myset2的差集存储到myset4里面。

127.0.0.1:6379> sadd myset2 one

(integer) 1

127.0.0.1:6379> sadd myset2 two

(integer) 1

127.0.0.1:6379> sadd myset2 three

(integer) 1

127.0.0.1:6379> sadd myset3 one

(integer) 1

127.0.0.1:6379> sadd myset3 two

(integer) 1

127.0.0.1:6379> sadd myset3 three

(integer) 1

127.0.0.1:6379> sadd myset3 four

(integer) 1

127.0.0.1:6379> sadd myset3 five

(integer) 1

127.0.0.1:6379> sadd myset3 six

(integer) 1

127.0.0.1:6379> sdiff myset2 myset3

(empty list or set)

127.0.0.1:6379> sdiff myset3 myset2
 //显示myset3中含有myset2的元素

1) "six"

2) "five"

3) "four"

127.0.0.1:6379> sdiffstore myset4 myset3 myset2将myset3和myset2的差集存入myset4中

(integer) 3

127.0.0.1:6379> smembers myset4

1) "six"

2) "five"

3) "four"

127.0.0.1:6379>

sinter:

返回所有给定key的交集

sinterstore将取出的差集存入到另外的一个集合中。

127.0.0.1:6379> sadd myset1 one

(integer) 1

127.0.0.1:6379> sadd myset1 two

(integer) 1

127.0.0.1:6379> sadd myset2 two

(integer) 1

127.0.0.1:6379> sadd myset2 three

(integer) 1

127.0.0.1:6379> sadd myset2 four

(integer) 1

127.0.0.1:6379> sadd myset2 five

(integer) 1

127.0.0.1:6379> sadd myset3 four

(integer) 1

127.0.0.1:6379> sadd myset3 five

(integer) 1

127.0.0.1:6379> sadd myset3 six

(integer) 1

127.0.0.1:6379> sadd myset3 seven

(integer) 1

127.0.0.1:6379> smembers myset1

1) "two"

2) "one"

127.0.0.1:6379> smembers myset2

1) "four"

2) "three"

3) "five"

4) "two"

127.0.0.1:6379> smembers myset3

1) "seven"

2) "four"

3) "six"

4) "five"

127.0.0.1:6379> sinter myset3 myset2

1) "four"

2) "five"

127.0.0.1:6379> sinterstore myset6 myset3 myset2

(integer) 2

127.0.0.1:6379> smembers myset6

1) "four"

2) "five"

127.0.0.1:6379>

sunion:表示插入并集。

返回所有给定key的并集。

127.0.0.1:6379> sadd myset1 one

(integer) 1

127.0.0.1:6379> sadd myset2 two

(integer) 1

127.0.0.1:6379> sadd myset1 two

(integer) 1

127.0.0.1:6379> sadd myset2 three

(integer) 1

127.0.0.1:6379> sadd myset2 four

(integer) 1

127.0.0.1:6379> sunion myset1 myset2   
查看并集

1) "three"

2) "two"

3) "four"

4) "one"

127.0.0.1:6379>
sunionstore myset7 myset1 myset2  
将并集的结果存入myset7中

(integer) 4                  
个元素插入myset7中

127.0.0.1:6379>
smembers myset1

1) "two"

2) "one"

127.0.0.1:6379> smembers myset2

1) "three"

2) "two"

3) "four"

127.0.0.1:6379> smembers myset7

1) "three"

2) "two"

3) "four"

4) "one"

127.0.0.1:6379>

smove:从第一个key对应的set中移除member并添加到第二个对应的set中。(将第一个集合中的元素剪切下来放入第二个元素中)

将smove myset2 myset7 three表示:myset2中的three元素扔到myset7中

127.0.0.1:6379> smembers myset1

1) "two"

2) "one"

127.0.0.1:6379> smembers myset2

1) "three"

2) "two"

3) "four"

127.0.0.1:6379> sadd myset1 five

(integer) 1

127.0.0.1:6379> smembers myset8

(empty list or set)

127.0.0.1:6379> smove myset1 myset8 two
 将myset1中的two元素移动到myset8中

(integer) 1

127.0.0.1:6379> smembers myset8

1) "two"

127.0.0.1:6379> smembers myset1

1) "five"

2) "one"

127.0.0.1:6379>

scard返回名称为key的set的元素个数。(看集合中的元素个数)

127.0.0.1:6379> smembers myset1   
看myset1集合中的元素有哪些

1) "five"

2) "one"

127.0.0.1:6379> smembers myset2  
看myset2集合中的元素有哪些

1) "three"

2) "two"

3) "four"

127.0.0.1:6379> smembers myset8  
看myset8集合中的元素有哪些

1) "two"

127.0.0.1:6379> scard myset1   
查看myset1中的元素个数

(integer) 2

127.0.0.1:6379> scard myset2   
查看myset2中的元素个数

(integer) 3

127.0.0.1:6379> scard myset8

(integer) 1

127.0.0.1:6379>

sismember:测试member是否是名称为key的set的元素。(判断某个元素是否是某个集合中的元素,是返回1,不是返回0)

127.0.0.1:6379> smembers myset1

1) "five"

2) "one"

127.0.0.1:6379> sismember myset1 one   
判断one是否是myset1中的元素

(integer) 1

127.0.0.1:6379> sismember myset1 two  
判断two是否是myset1中的元素

(integer) 0

127.0.0.1:6379>

srandmember:随机返回名称为key的set的一个元素,但不删除元素。

127.0.0.1:6379> smembers myset1

1) "five"

2) "one"

127.0.0.1:6379> srandmember myset7

"three"

127.0.0.1:6379> srandmember myset7

"two"

127.0.0.1:6379> srandmember myset7

"four"

127.0.0.1:6379> srandmember myset7

"three"

Sorted sets类型及操作

Sortedset是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为由两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。

zadd:向名称为key的zset中添加元素member,score用于排序。如果该元素存在,则更新器顺序。语法:zadd
set名称
顺序

127.0.0.1:6379> zadd myzset 1 "one"

(integer) 1

127.0.0.1:6379> zadd myzset 2 "two"

(integer) 1

127.0.0.1:6379> zadd myzset 3 "two"

(integer) 0

这里的0 -1表示顺序号  
withscores表示的意思是带上顺序号。

127.0.0.1:6379> zrange myzset 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "3"

127.0.0.1:6379>

再如:

127.0.0.1:6379> zadd sset1 1 two

(integer) 1

127.0.0.1:6379> zadd sset1 2 two

(integer) 0

127.0.0.1:6379> zadd sset1 3 two

(integer) 0

127.0.0.1:6379> zadd sset1 1 one

(integer) 1

127.0.0.1:6379> zrange sset1 0 -1

1) "one"

2) "two"

127.0.0.1:6379> zrange sset1 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "3"

127.0.0.1:6379>

zrem:删除名称为key的zset中的元素member

127.0.0.1:6379> zrange sset1 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "3"

127.0.0.1:6379> zrem sset1 two

(integer) 1

127.0.0.1:6379> zrange sset1 0 -1 withscores

1) "one"

2) "1"

127.0.0.1:6379>

zincrby:如果在名称为key的zset中已经存在元素member,则该元素的score增加increment,否则向该集合中添加该元素,其score的值为increment。

127.0.0.1:6379> zrange sset1 0 -1 withscores

1) "one"

2) "1"

127.0.0.1:6379> zincrby sset1 2 one

"3"

127.0.0.1:6379> zrange sset1 0 -1 withscores

1) "one"

2) "3"

127.0.0.1:6379>

zrank:返回名称为key的zset中的member元素的排名。(按score从小到大排序)即下标。(返回的是索引值,和序号值是有差别的)

127.0.0.1:6379> zadd sset2 1 one

(integer) 1

127.0.0.1:6379> zadd sset2 2 two

(integer) 1

127.0.0.1:6379> zadd sset2 3 three

(integer) 1

127.0.0.1:6379> zadd sset2 4 four

(integer) 1

127.0.0.1:6379> zadd sset2 5 five

(integer) 1

127.0.0.1:6379> zrange sset2 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "2"

5) "three"

6) "3"

7) "four"

8) "4"

9) "five"

10) "5"

127.0.0.1:6379> zrank sset2 four

(integer) 3       
//这里的3表示的是索引值而不是序号值。

127.0.0.1:6379>

zrevrank:返回名称为key的zset中member元素的排名。(按score从大到小排序)即下标。

127.0.0.1:6379> zrange sset2 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "2"

5) "three"

6) "3"

7) "four"

8) "4"

9) "five"

10) "5"

127.0.0.1:6379> zrevrank sset2 four  
//获得four的逆向索引

(integer) 1

127.0.0.1:6379> zrevrank sset2 two  
//获得two的逆向索引

(integer) 3

zrevrange:返回名称为key的zset(按score从大到小顺序)中的index从start到end的所有元素。(也就是说是反向排序)

127.0.0.1:6379> zrevrange sset2 0 -1 withscores

1) "five"

2) "5"

3) "four"

4) "4"

5) "three"

6) "3"

7) "two"

8) "2"

9) "one"

10) "1"

127.0.0.1:6379>

zrangebyscore:找到序号在指定范围内的元素

127.0.0.1:6379> zrevrange sset2 0 -1 withscores

1) "five"

2) "5"

3) "four"

4) "4"

5) "three"

6) "3"

7) "two"

8) "2"

9) "one"

10) "1"

127.0.0.1:6379> zrangebyscore sset2 2 4 withscores

1) "two"

2) "2"

3) "three"

4) "3"

5) "four"

6) "4"

127.0.0.1:6379>

zcount:返回集合中score在给定区间的数量。

127.0.0.1:6379> zrevrange sset2 0 -1 withscores

1) "five"

2) "5"

3) "four"

4) "4"

5) "three"

6) "3"

7) "two"

8) "2"

9) "one"

10) "1"

127.0.0.1:6379> zcount sset2 2 4   
表示包括区间值

(integer) 3

127.0.0.1:6379> zcount sset2 4 5   
表示包括区间值

(integer) 2

127.0.0.1:6379>

zcard:返回集合中的所有元素的个数

127.0.0.1:6379> zrevrange sset2 0 -1 withscores

1) "five"

2) "5"

3) "four"

4) "4"

5) "three"

6) "3"

7) "two"

8) "2"

9) "one"

10) "1"

127.0.0.1:6379> zcard sset2

(integer) 5

127.0.0.1:6379>

zremrangebyrank:删除集合中排名在给定区间的元素(按照索引来删除)。

127.0.0.1:6379> zrange sset2 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "2"

5) "three"

6) "3"

7) "four"

8) "4"

9) "five"

10) "5"

127.0.0.1:6379> zremrangebyrank sset2 2 3   
//注意这里的2 3表示的是索引

(integer) 2

127.0.0.1:6379> zrange sset2 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "2"

5) "five"

6) "5"

127.0.0.1:6379>

zremrangebyscore:删除集合中score在给定区间的元素(表示的是按照顺序删除)。

127.0.0.1:6379> zrange sset2 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "2"

5) "five"

6) "5"

127.0.0.1:6379> zremrangebyscore sset2 3 4

(integer) 0

127.0.0.1:6379> zrange sset2 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "2"

5) "five"

6) "5"

127.0.0.1:6379> zremrangebyscore sset2 2 5  
之间的元素

(integer) 2

127.0.0.1:6379> zrange sset2 0 -1 withscores

1) "one"

2) "1"

127.0.0.1:6379>

04_NoSQL数据库之Redis数据库:set类型和zset类型的更多相关文章

  1. 【redis】04set类型和zset类型

    sets类型   sets类型及操作   Set类型是一个集合,他是string类型的无序集合,也就是说咱们的set是没有顺序的, Set是通过hash table实现的,添加.删除和查找的复杂度都是 ...

  2. 【redis】02string类型和hash类型

    Redis的数据类型   Redis主要分为五个数据类型,一个是string,最简单的一个数据类型,hash,list, 还有set集合,还有zset有序集合,这是咱们redis的五种基础类型, 接下 ...

  3. 第一节: Redis之String类型和Hash类型的介绍和案例应用

    一. String类型基础 1.类型介绍 典型的Key-Value集合,如果要存实体,需要序列化成字符串,获取的时候需要反序列化一下. 2. 指令Api说明 3.常用Api说明 (1).StringS ...

  4. 第二节: Redis之Set类型和SortedSet类型的介绍和案例应用

    一. Set类型基础 1. 类型说明 1个key→多个value,value的值不重复! Set一种无序且元素内容不重复的集合,不用做重复性判断了,和我们数学中的集合概念相同,可以对多个集合求交集.并 ...

  5. 着重基础之—MySql Blob类型和Text类型

    着重基础之—MySql Blob类型和Text类型 在经历了几个Java项目后,遇到了一些问题,在解决问题中体会到基础需要不断的回顾与巩固. 最近做的项目中,提供给接口调用方数据同步接口,传输的数据格 ...

  6. MIME类型和Java类型

    MIME类型和Java类型 类型转换Spring Cloud Stream提供的开箱即用如下表所示:“源有效载荷”是指转换前的有效载荷,“目标有效载荷”是指转换后的“有效载荷”.类型转换可以在“生产者 ...

  7. DATETIME类型和BIGINT 类型互相转换

    项目中使用BIGINT来存放时间,以下代码用来转换时间类型和BIGINT类型 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========= ...

  8. Timestame类型和String 类型的转化

    Timestame类型和String 类型的转化 String转化为Timestamp: SimpleDateFormat df = new SimpleDateFormat("yyyy-M ...

  9. Python3.x中bytes类型和str类型深入分析

    Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...

随机推荐

  1. 基于Android的高校饮水宝app

     这是一个高校饮用水配送项目,是一个毕业设计,去年的,包括了服务端和客户端,是一个不错的项目,分享一下: 随着通讯行业的迅猛发展,我国的手机用户也在不断的增加.据信息部的统计数据显示,我国已有接近7. ...

  2. C++多态实现原理

    C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数.如果对象类型是派生类,就调用派生类的函数:如果对象类型是基类 ...

  3. bzip2

    压缩和解压缩文件bzip2 options] [file-list] bunzip2 [options] [file-list] bzcat [options] [file-list] bzip2re ...

  4. 浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别

    浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别 Spring 2.5 版本新增了注解功能, 通过注解,代码编写简化了很多:但熟悉注解的使 ...

  5. Mybatis Generator 代码生成配置

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...

  6. python2.7入门---内置函数

        内置函数     abs() divmod() input() open() staticmethod() all() enumerate() int() ord() str() any() ...

  7. Go实现海量日志收集系统(四)

    到这一步,我的收集系统就已经完成很大一部分工作,我们重新看一下我们之前画的图: 我们已经完成前面的部分,剩下是要完成后半部分,将kafka中的数据扔到ElasticSearch,并且最终通过kiban ...

  8. JButton

    JButton和Button区别: Button是在java.awt.*中的,而JButton是在javax.swing.*中,swing是awt的一个扩展,由纯java便携,它有一个与平台无关的实现 ...

  9. iOS多线程编程--NSOperation(转)

    这篇文章写得非常不错,基础用法都涉及到了,我把文章提到的例子都写到了demo里面, 原文地址: iOS多线程--彻底学会多线程之『NSOperation』 demo下载:https://github. ...

  10. JQuery写的一个常见的banner

    大致的布局如下: <div class="banner" >                <div class="pic">      ...