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
两个有序表的score取member的交集加一块,成为第三个有序表。
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
两个有序表的score取member的并集加一块,成为第三个有序表。
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默认都是1,aggregate默认是sum;
在指定weight值后,入聚合函数前,会先将对应score乘以weight值。
在指定aggregate值max或min后,交集的部分不会再score相加,而是score取几者中的最大或最小值。
给salary1 的score*1 给salary2的score*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)