Redis之SortedSet

0,字符串String

1,哈希表Hash

2,列表List

3,集合Set             例子

4,有序集合SortedSet    例子myzset

5,发布/订阅Pub/Sub

6,事务Transaction

7,脚本Script

8,连接Connection

9,服务器Server

表名可以理解为key

----------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------

-------4,有序集合SortedSet

-------有序集合 顺序编号score(可以是小数,可以是负数) 元素值member

-------有序集合:集合管理多个score,每个score管理多个member,所有的member不能重复。

----------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------

**************************************************************************

*这里的key是有序集合;排名rank用start(0开始),stop

*zadd              key score member

*zrem              key member

*zremrangebyrank  key start stop  -1排名倒数第一 0排名第一负数仅删除时可用

*zremrangebyscore  key score1 score2

*zincrby            key num member

*zrank             key member

*zrevrank          key member

*zrange            key start stop withscores

*zrevrange         key start stop withscores

*zrangebyscore     key score1 score2 withscores

*zrevrangebyscore key score1 score2 withscores

*zcount            key score1 score2

*zscore                   key member

*zcard             key

*zinterstore        key num key1 key2

*zunionstore       key num key1 key2

*zscan

**************************************************************************

zadd key score member

注意:score可以1:n;member不会重复

127.0.0.1:6379>zadd myzset 1 d

(integer)1

127.0.0.1:6379>zadd myzset 1 e

(integer)1

127.0.0.1:6379>zrange myzset 0 -1 withscores

1)"d"

2)"1"

3)"e"

4)"1"

127.0.0.1:6379>zadd myzset 4 test

(integer)1

127.0.0.1:6379>zadd myzset 5 test

(integer)0

7)"test"

8)"5"

附:多行插入zadd key score1 member1 score2 member2 ...

附:zincrby在member不存在时,也会起到zadd的作用。

删 根据member删,因为member唯一。

zrem key member

127.0.0.1:6379>zrem myzset d

(integer)1

127.0.0.1:6379>zrem myzset hello world

(integer)2

附:多行删除zrem key member member ...

删 根据rank删 删除key中根据给定的排名区间的member

zremrangebyrank key start stop

127.0.0.1:6379>zrank myzset b

(integer)4

127.0.0.1:6379>zrank myzset c

(integer)5

(integer)6

127.0.0.1:6379>zrank myzset e

(integer)7

127.0.0.1:6379>zremrangebyrank myzset 5 6

(integer)2

127.0.0.1:6379>zrank myzset b

(integer)4

127.0.0.1:6379>zrank myzset c

(nil)

127.0.0.1:6379>zrank myzset d

(nil)

127.0.0.1:6379>zrank myzset e

(integer)5

删 根据score删 删除key中根据给定的score区间的member

zremrangebyscore key score1 score2

127.0.0.1:6379>zrangebyscore myzset 3 3

1)"c"

2)"d"

127.0.0.1:6379>zremrangebyscore myzset 3 3

(integer)2

127.0.0.1:6379>zrangebyscore myzset 3 3

(emptylist or set)

改(或增) 根据member改 以加减score的方式根据member改score

zincrby key num member

127.0.0.1:6379>zincrby myzset 6 e

"7"

127.0.0.1:6379>zincrby myzset -2 e

"5"

//rank 排,队列

查 查member对应的 排名 -----排名规则:根据score升序排序,排序角标从0开始从小到大

zrank key member

127.0.0.1:6379>zincrby myzset 0 e

"4"

127.0.0.1:6379>zrank myzset e

(integer)6

查 查member对应的 排名 ------排名规则:根据score降序排序,排序角标从0开始从小到大

zrevrank key member

127.0.0.1:6379>zincrby myzset 0 g

"6"

127.0.0.1:6379>zrank myzset g

(integer)8

127.0.0.1:6379>zrevrank myzset g

(integer)0

查 根据member查对应的score

zscore key member

127.0.0.1:6379>zrangebyscore myzset 2 2

b

127.0.0.1:6379>zscore myzset b

2

查 根据排名查出一定范围数据--对应zrank

zrange key start stop withscores

127.0.0.1:6379>zincrby myzset 0 b

"2"

127.0.0.1:6379>zrank myzset b

(integer)3

127.0.0.1:6379>zrange myzset 3 5

1)"b"

2)"c"

3)"d"

查 根据排名查出一定范围数据--对应zrevrank

zrevrange key start stop withscores

127.0.0.1:6379>zrevrange myzset 0 1

1)"g"

2)"f"

查 查两个score之间的member

zrangebyscore key score1 score2 withscores

zrevrangebyscore key score1 score2 withscores//将结果逆序显示:eg:d c b

 

 9) "b"

10)"2"

11)"c"

12)"3"

13)"d"

14)"3"

127.0.0.1:6379>zrangebyscore myzset 2 3

1)"b"

2)"c"

3)"d"

查 查两个score之间的member的部分数量

zcount key score1 score2

 9) "c"

10)"3"

11)"d"

12)"3"

127.0.0.1:6379>zcount myzset 3 3

(integer)2

查 查看集合中 member的总数量

zcard key

127.0.0.1:6379>zcard myzset

(integer)10

两个有序表的scoremember的交集加一块,成为第三个有序表。

zinterstore key3 num key1 key2

127.0.0.1:6379>zadd myzset 1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h

8

127.0.0.1:6379>zadd yourzset 1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 i

8

127.0.0.1:6379>zadd herzset 12 "哈哈"

1

127.0.0.1:6379>zinterstore herzset 2 myzset yourzset

7

127.0.0.1:6379>zrange herzset 0 -1

a

b

c

d

e

f

g

127.0.0.1:6379>zcard herzset

7

附:由上可知:

1,将key1与key2合并时,member相同score才会被聚合函数相加并存储到表key3中.

2,key3被清空了.我们可以根据这个特性,快速清空有序集合key。如:zinterstore key 1 key1

两个有序表的scoremember的并集加一块,成为第三个有序表。

zunionstore destination numkeys key

127.0.0.1:6379> zaddsalary1 2000 peter 1000 jack 3000 tom 5000 dog

4

127.0.0.1:6379> zaddsalary2 2000 xi1 1000 xi2 3000 xi3 5000 dog

4

127.0.0.1:6379>zunionstore salary 2 salary1 salary2

7

127.0.0.1:6379> zrangesalary 0 -1 withscores

jack

1000

xi2

1000

peter

2000

xi1

2000

tom

3000

xi3

3000

dog

10000

 

 

 

 

难点:聚合函数(aggregation function)

ZINTERSTORE destination numkeys key [key ...][WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

交集:必须都有member才会获得。

ZUNIONSTORE destination numkeys key [key ...][WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

并集:全部member都会获得。

交集或并集:在传入聚合函数执行交集或并集前,weights默认都是1aggregate默认是sum

在指定weight值后,入聚合函数前,会先将对应score乘以weight值。

在指定aggregatemaxmin后,交集的部分不会再score相加,而是score取几者中的最大或最小值。

 

salary1 score*1 salary2score*2

127.0.0.1:6379> zunionstore salary 2 salary1 salary2 weights 1 2

7

127.0.0.1:6379> zrange salary 0 -1 withscores

jack

1000

peter

2000

xi2

2000

tom

3000

xi1

4000

xi3

6000

dog

15000

127.0.0.1:6379> zunionstore salary 2 salary1 salary2 weights 1 2aggregate min

7

// aggregate sum dog工资==dog1+dog2

// aggregate min dog工资==min(dog1,dog2)

// aggregate max dog工资==max(dog1,dog2)

猜你喜欢

转载自blog.csdn.net/qq_39937902/article/details/80533154