04Redis数据类型之Set类型及Zset 类型

来源:互联网 发布:网络教育小学教育专业 编辑:程序博客网 时间:2024/05/16 07:57

1、简介:

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

2、Set类型的基本方法:

2.1、sadd方法:向名称为key的set中添加元素。

redis 127.0.0.1:6379>sadd myset “hello”

(integer)1

redis 127.0.0.1:6379>sadd myset “world”

(integer)1

redis 127.0.0.1:6379>sadd myset “hello”

(integer)0

redis 127.0.0.1:6379>smembers myset

“hello”

“world”

2.2、srem方法:删除名称为key的set中的元素

redis 127.0.0.1:6379>sadd myset1 “hello”

redis 127.0.0.1:6379>sadd myset1 “world”

redis 127.0.0.1:6379>srem myset1 “hello”

redis 127.0.0.1:6379>smembers myset1

“world”

2.3、spop方法:随机返回并删除名称为key的set中的一个元素。
2.4、sdiff方法:返回所有给定key与第一个key的差集

eg:redis 127.0.0.1:6379>rpush  myset2 “hello”

redis 127.0.0.1:6379>rpush myset2“world”

redis 127.0.0.1:6379>rpush myset3“hello”

redis 127.0.0.1:6379>rupsh myset3“bitty”

redis 127.0.0.1:6379>sdiff myset2 myset3

“world”

注意:返回的是前面key的差集,所以只返回world,而没有bitty。

2.5、sdiffstore方法:返回所有给定key与第一个key的差集,并将结果保存为另一个key。

eg: redis 127.0.0.1:6379>rpush myset4“hello”

redis 127.0.0.1:6379>rpush myset4“world”

redis 127.0.0.1:6379>lpush myset5“hello”

redis 127.0.0.1:6379>lpush myset5“putyy”

redis 127.0.0.1:6379>sdiffstore myset6myset4 myset5

redis 127.0.0.1:6379>smembers myset6

“world”

2.6、sinter方法:返回所有给定key的交集。

eg:redis 127.0.0.1:6379>rpushmyset7 “one”

redis 127.0.0.1:6379>rpush myset7 “two”

redis 127.0.0.1:6379>rpush myset8 “one”

redis 127.0.0.1:6379>rpush myset8“three”

redis 127.0.0.1:6379>sinter myset7myset8

“one”

2.7、sinterstore方法:返回所有给定key的交集,并将结果存为另一个key。

eg: redis 127.0.0.1:6379>rpush myset9 “one”

redis 127.0.0.1:6379>rpush myset9 “two”

redis 127.0.0.1:6379>rpush myset10 “one”

redis 127.0.0.1:6379>rpush myset10“three”

redis 127.0.0.1:6379>sinterstroemyset11  myset9 myset10

redis 127.0.0.1:6379>smembers myset11

“one”

2.8、sunion方法:返回所有给定key的并集。

eg: redis 127.0.0.1:6379>smembersmyset12

“one”

“two”

redis 127.0.0.1:6379>smembers myset13

“one”

“three”

redis 127.0.0.1:6379>sunion myset2myset3

“three”

“one”

“two”

2.9、sunionstore方法:

使用方法类似sdiffstroe方法,不再举例。

2.10、smove方法:从第一个key对应的set中移除member并添加到第二个对应的set中。

eg: redis 127.0.0.1:6379>smembersmyset11

“one”

“two”

redis 127.0.0.1:6379>smebers myset12

“one”

“three”

redis 127.0.0.1:6379>smove myset11myset12 two

redis 127.0.0.1:6379>smembers myset12

“one”

“three”

“two”

2.11scard方法:返回名称为key的set的元素个数

eg:redis 127.0.0.1:6379>scardmyset2

(integer)1

2.12、sismember方法:测试member是否是名称为key的set的元素。

eg: redis 127.0.0.1:6379>smembers myset1

“two”

redis 127.0.0.1:6379>sismember myset1two

(integer)1

redis 127.0.0.1:6379>sismember myset1one

(integer)0

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

eg: redis 127.0.0.1:6379>sembers myset3

“one”

“two”

redis 127.0.0.1:6379>srandmember myset3

“two”

 

3、Zset类型的操作方法:

3.1定性:

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

3.2方操作法:

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

eg:redis 127.0.0.1:6379>zadd  myzset 1 “one”

redis 127.0.0.1:6379>zadd myzset1  2 “two”

redis 127.0.0.1:6379>zadd myzset1  3 “one”

redis 127.0.0.1:6379>zrange myzset1  0 -1  withscores

“two”

“2”

“ one”

“3”

3.2.2、zrem方法:删除名称为key的zset中的元素member。

eg : redis 127.0.0.1:6379>zrange myset10 -1 withscores

“one”

“1”

“two”

“3”

redis 127.0.0.1:6379>zrem myset1 one

redis 127.0.0.1:6379>zrange myset1 0 -1withscores

“two”

“3”

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

eg: redis 127.0.0.1:6379>zadd myset1 1“one”

redis 127.0.0.1:6379>zincrby myset1 2“one”

redis 127.0.0.1:6379>zrange myset1 0 -1withscores

“one”

“3”

 注意:可见,incr增加的内容是对排序的score进行增加。

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

eg: redis 127.0.0.1:6379>zrange myset1 0-1 withscores

“one”

“1“

“two”

“2”

“three”

“4”

redis 127.0.0.1:6379>zrank myset1 two

(integer)1 //在myset1中按照score升序排序为one,two,three。显然two的下标索引为1,给(integer)1就是给出的索引值。

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

例子就不写了,和zrank不一样地方就是score排序方式不同。

3.2.6、zrevrange方法:返回名称为key的zset(按score从大到小排序)中index从start到end的所有元素。
3.2.7、zrangebyscore方法:返回score在给定区间的元素(包含边界)

eg:redis 127.0.0.1:6379>zrangemyset01 0 -1 withscores

“one”

“1”

“two”

“2”

“three”

“3”

“four”

“4”

redis 127.0.0.1:6379>zrangebyscoremyset01  2  4 withscores

“two”

“2”

“three”

“3”

“four”

“4”

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

eg:redis 127.0.0.1:6379>zrangemyset01  0  -1 withscores

“one”

“1”

“two”

“2”

“three”

“3”

“four”

“4”

eg:redis 127.0.0.1:6379>zcountmyset01 2 4

(integer)3

3.2.9、zcard:返回集合里面所有元素的个数。

eg:redis 127.0.0.1:6379>zcardmyset01

(integer)4

3.2.10、zremrangebyrank:按照score升序排序后,删除索引为指定区间的元素。

eg:redis 127.0.0.1:6379>zrangemyset01 0 -1 withscores

“one”

“1”

“two”

“2”

“three”

“3”

redis 127.0.0.1:6379>zremrangebyrankmyset01 1 1

redis 127.0.0.1:6379>zrange myset01 0 -1withscores

“one”

“1”

“three”

“3”

3.2.11、