县城房地产网站可以做吗,手机网站设计方案,网站开发用台式机电脑配置,泰安网站建设哪家强set 无序集合类型
sadd 和 smembers SADD#xff1a;将一个或者多个元素添加到set中。注意,重复的元素无法添加到set中。 语法#xff1a;SADD key member [member] 把集合中的元素,叫做member,就像hash类型中,叫做field类似. 返回值表示本次操作,添加成功了几个元素. 时间复…set 无序集合类型
sadd 和 smembers SADD将一个或者多个元素添加到set中。注意,重复的元素无法添加到set中。 语法SADD key member [member] 把集合中的元素,叫做member,就像hash类型中,叫做field类似. 返回值表示本次操作,添加成功了几个元素. 时间复杂度O(1) SMEMBERS获取一个set中的所有元素,注意,元素间的顺序是无序的。 语法SMEMBERS key 返回值:所有元素的列表。 时间复杂度:0(N) 127.0.0.1:6379 flushall
OK
127.0.0.1:6379 sadd key 1 2 3 4
(integer) 4
127.0.0.1:6379 type key
set
127.0.0.1:6379 sadd key2 1 1 2 3 4
(integer) 4
127.0.0.1:6379 smembers key
1) 1
2) 2
3) 3
4) 4
127.0.0.1:6379 smembers key2
1) 1
2) 2
3) 3
4) 4sismember 和 scard SISMEMBER判断一个元素在不在set中。 语法SISMEMBER key member 时间复杂度:0(1) 返回值:1表示元素在set中。0表示元素不在set中或者key不存在。 scard获取一个set的基数(cardinality),即set中的元素个数。 语法SCARD key 127.0.0.1:6379 sismember key 1
(integer) 1
127.0.0.1:6379 sismember key 100
(integer) 0
127.0.0.1:6379 scard key
(integer) 4
127.0.0.1:6379 scard key2
(integer) 4spop和srandmember spop使用spop删除元素的时候其实是随机删除. SPOP key [count] 返回值:取出的元素。 srandmember:随机获取集合中的元素 127.0.0.1:6379 flushall
OK
127.0.0.1:6379 sadd key 1 2 3 4
(integer) 4
127.0.0.1:6379 spop key
3
127.0.0.1:6379 spop key
2
127.0.0.1:6379 spop key
4
127.0.0.1:6379 spop key
1
-- 再次创建一个
127.0.0.1:6379 sadd key2 1 2 3 4
(integer) 4
127.0.0.1:6379 spop key2
1
127.0.0.1:6379 spop key2
2
127.0.0.1:6379 spop key2
3
127.0.0.1:6379 spop key2
4
-- 随机获取集合元素
127.0.0.1:6379 sadd key 1 2 3 4
(integer) 4
127.0.0.1:6379 srandmember key
1
127.0.0.1:6379 srandmember key
4
127.0.0.1:6379 srandmember key
3
-- 随机获取多个元素
127.0.0.1:6379 srandmember key 2
1) 3
2) 2smove和srem 语法SMOVE source destination member smove含义把member从source上删除,再插入到destination中 127.0.0.1:6379 flushall
OK
127.0.0.1:6379 sadd key 1 2 3 4
(integer) 4
127.0.0.1:6379 sadd key2 5 6 7 8
(integer) 4
127.0.0.1:6379 smove key key2 1
(integer) 1
127.0.0.1:6379 SMEMBERS key
1) 2
2) 3
3) 4
127.0.0.1:6379 SMEMBERS key2
1) 1
2) 5
3) 6
4) 7
5) 8
-- 给key里再添加一个1,再次把这个1移动给key2
-- 针对上述的情况,smove不会视为出错。
-- 也会按照删除-插入进行执行
127.0.0.1:6379 sadd key 1
(integer) 1
127.0.0.1:6379 smove key key2 1
(integer) 1
127.0.0.1:6379 SMEMBERS key
1) 2
2) 3
3) 4
127.0.0.1:6379 SMEMBERS key2
1) 1
2) 5
3) 6
4) 7
5) 8
-- 如果要移动的元素在source中不存在。
-- 此时就会返回0表示移动失败了。
127.0.0.1:6379 SMOVE key key2 100
(integer) 0srem可以一次删除一个member,也可以一次删除多个membeer . 语法返回值表示删除成功的元素个数。 127.0.0.1:6379 flushall
OK
127.0.0.1:6379 sadd key 1 2 3 4
(integer) 4
127.0.0.1:6379 srem key 1
(integer) 1
127.0.0.1:6379 srem key 3 4
(integer) 2
127.0.0.1:6379 SMEMBERS key
1) 2集合间的操作
交集sinter和sinterstore
127.0.0.1:6379 flushall
OK
127.0.0.1:6379 sadd key 1 2 3 4
(integer) 4
127.0.0.1:6379 sadd key2 3 4 5 6
(integer) 4
127.0.0.1:6379 SINTER key key2
1) 3
2) 4
-- SINTERSTORE 把交集放到集合中
127.0.0.1:6379 SINTERSTORE key3 key key2
(integer) 2
127.0.0.1:6379 SMEMBERS key3
1) 3
2) 4并集sunion,sunionstore
127.0.0.1:6379 sunion key key2
1) 1
2) 2
3) 3
4) 4
5) 5
6) 6
127.0.0.1:6379 SUNIONSTORE key4 key key2
(integer) 6
127.0.0.1:6379 SMEMBERS key4
1) 1
2) 2
3) 3
4) 4
5) 5差集sdiff,sdiffstore
127.0.0.1:6379 SDIFF key key2
1) 1
2) 2
127.0.0.1:6379 SDIFF key2 key
1) 5
2) 6
127.0.0.1:6379 SDIFFSTORE key5 key key2
(integer) 2
127.0.0.1:6379 SMEMBERS key5
1) 1
2) 2
127.0.0.1:6379 SDIFFSTORE key6 key2 key
(integer) 2
127.0.0.1:6379 SMEMBERS key6
1) 5
2) 6set类型的编码
127.0.0.1:6379 flushall
OK
127.0.0.1:6379 sadd key 1 2 3 4
(integer) 4
127.0.0.1:6379 OBJECT encoding key
intset
127.0.0.1:6379 sadd key hello
(integer) 1
127.0.0.1:6379 OBJECT encoding key
hashtablezset 有序集合
zadd和zrange zadd往有序集合中,添加元素和分数。 ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member…] member和score称为是一个pair。注意添加的时候,既要添加元素,又要添加分数 有序集合分数相同,再按照元素自身字符串的字典序来排列。分数不同仍然按照分数来排。 XX:仅仅用于更新已经存在的元素,不会添加新元素。 NX:仅用于添加新元素,不会更新已经存在的元素。 CH:默认情况下,ZADD返回的是本次添加的元素个数,但指定这个选项之后,就会还包含本次更新的元素的个数。 INCR:此时命令类似ZINCRBY的效果,将元素的分数加上上指定的分数。此时只能指定一个元素和分数。 之前Hash,Set, List很多时候,添加一个元素,都是O(1)。此处,Zset则是logN。由于zset是有序结构,要求新增的元素,要放到合适的位置上(找位置)。 zrange查看有序集合中的元素详情了。类似于Irange,可以指定一对下标构成的区间。 时间复杂度O(log(N)M)start-stop区间的元素个数。此处要根据下标找到边界值。start对应的位置接下来就需要遍历了。 -- 添加集合
127.0.0.1:6379 zadd key 99 吕布 98 赵云 96 典韦 95 关羽
(integer) 4
127.0.0.1:6379 zrange key 0 -1
关羽
典韦
赵云
吕布
127.0.0.1:6379 zrange key 0 -1 withscores
关羽
95
典韦
96
赵云
98
吕布
99
127.0.0.1:6379 zadd key 97 赵云
0
127.0.0.1:6379 zrange key 0 -1 withscores
关羽
95
典韦
96
赵云
97
吕布
99
-- 如果修改的分数,影响到了之前的顺序,就会自动的移动元素位置,保持原有的升序顺序不变
127.0.0.1:6379 zadd key 10 吕布
0
127.0.0.1:6379 zrange key 0 -1 withscores
吕布
10
关羽
95
典韦
96
赵云
97nx和XX
-- nx 仅用于添加新元素,不会更新已经存在的元素。
127.0.0.1:6379 zadd key nx 94 张飞
1
127.0.0.1:6379 zrange key 0 -1 withscores
吕布
10
张飞
94
关羽
95
典韦
96
赵云
97
127.0.0.1:6379 zadd key nx 92 张飞
0
127.0.0.1:6379 zrange key 0 -1 withscores
吕布
10
张飞
94
关羽
95
典韦
96
赵云
97
-- XX: 仅仅用于更新已经存在的元素,不会添加新元素。
127.0.0.1:6379 zadd key XX 92 张飞
0
127.0.0.1:6379 zrange key 0 -1 withscores
吕布
10
张飞
92
关羽
95
典韦
96
赵云
97
127.0.0.1:6379 zadd key XX 90 马超
0
127.0.0.1:6379 zrange key 0 -1 withscores
吕布
10
张飞
92
关羽
95
典韦
96
赵云
97-- zadd在默认情况下,返回值就是新增成功的元素个数.
-- 指定这个选项之后,就会还包含本次更新的元素的个数。
127.0.0.1:6379 zadd key CH 90 张飞
1
127.0.0.1:6379 zrange key 0 -1 withscores
吕布
10
张飞
90
关羽
95
典韦
96
赵云
97
-- INCR:此时命令类似ZINCRBY的效果,将元素的分数加上上指定的分数。此时只能指定一个元素和分数。
127.0.0.1:6379 zadd key incr 4 张飞
94
127.0.0.1:6379 zrange key 0 -1 withscores
吕布
10
张飞
94
关羽
95
典韦
96
赵云
97zcard,zcount zcard 获取一个zset的基数(cardinality),即zset中的元素个数。 语法ZCARD key zcount返回分数在min和max之间的元素个数,默认情况下,min[max都是包含的,可以通过(排除 ZCOUNT key min max zcount的时间复杂度O(logN)。 min和max是可以写成浮点数(zset分数本身就是浮点数) 在浮点数中,存在两个特殊的数值: inf:无穷大.-inf:负无穷大. zset中分数也是支持使用 inf和-inf作为max和min的 -- 有序集合中元素的个数
127.0.0.1:6379 zcard key
5
-- 集合分数区间中的元素的个数
127.0.0.1:6379 zcount key 95 97
3
127.0.0.1:6379 zcount key (95 97
2
127.0.0.1:6379 zcount key (95 (97
1
127.0.0.1:6379 zcount key -inf inf
5zrevrange,zrangebyscore ZREVRANGEreverse 逆序。按照分数降序进行遍历并打印。 语法ZREVRANGE key start stop [WITHSCORES] 此处的区间,两个参数的顺序是不需要变的 zrangebyscore按照分数来找元素的.相当于和刚才的zcount类似 这个命令可能在6.2.0之后废弃,并且功能合并到ZRANGE中。 时间复杂度O(logN M)
127.0.0.1:6379 ZREVRANGE key 0 -1 withscores
赵云
97
典韦
96
关羽
95
张飞
94
吕布
10
127.0.0.1:6379 ZRANGEBYSCORE key 95 97
关羽
典韦
赵云
127.0.0.1:6379 ZRANGEBYSCORE key 95 97 withscores
关羽
95
典韦
96
赵云
97zpopmax zpopmax : 删除并返回分数最高的count个元素。 返回值就是被删除的元素(包括member和score). 如果存在多个元素,分数相同,同时为最大值,zpopmax删的时候,仍然只删除其中一个元素。分数虽然是主要因素。如果分数相同会按照member字符串的字典序决定先后 O(log(N) * M)M : count要删除的元素个数。N是有序集合的元素个数. 127.0.0.1:6379 zrange key 0 -1 withscores
吕布
10
张飞
94
关羽
95
典韦
96
赵云
97
127.0.0.1:6379 zpopmax key
赵云
97
127.0.0.1:6379 zpopmax key 2
典韦
96
关羽
95
-- 再次插入两个有序集合元素
127.0.0.1:6379 zadd key 96 关羽 96 典韦
2
127.0.0.1:6379 zpopmax key
典韦
96bzpopmax bzpopmaxZPOPMAX的阻塞版本。 语法BZPOPMAX key [key …] timeout 阻塞也是在有序集合为空的时候触发阻塞.阻塞到有其他客户端插入元素 timeout表示超时时间最多阻塞多久。单位是s支持小数形式。写作0.1就是100ms。 如果有序集合中已经有了元素了,直接就能返回不会阻塞了。 用法和blpopbrpop的用法一样。都可以同时阻塞多个key。 -- 客户端1
127.0.0.1:6379 flushall
OK
127.0.0.1:6379 zadd key 10 zhangsan 20 lisi 30 wangwu
(integer) 3
-- 客户端2
-- 获取如果有序集合中有元素就获取无元素就阻塞
127.0.0.1:6379 BZPOPMAX key 600
1) key
2) wangwu
3) 30
127.0.0.1:6379 BZPOPMAX key 600
1) key
2) lisi
3) 20
127.0.0.1:6379 BZPOPMAX key 600
1) key
2) zhangsan
3) 10
127.0.0.1:6379 BZPOPMAX key 600
-- 客户端1
127.0.0.1:6379 zadd key 40 zhaoliu 50 zhangqi 60 laoba
(integer) 3
-- 客户端2
-- 客户端1增加元素后。BZPOPMAX获取元素
127.0.0.1:6379 BZPOPMAX key 600
1) key
2) laoba
3) 60
(115.58s)zpopmin和bzpopmin zpopmin : 删除有序集合中,最小的元素。 时间复杂度O(logN*M) 此处的zpopmin和上面的zpopmax的逻辑是一致的(同一个函数实现的) 虽然redis的有序集合记录了开头的元素,但是删除的时候使用的是通用的删除函数。导致出现了重新查找的过程。 bzpopmin阻塞版本的zpopmin 语法BZPOPMIN key [key …] timeout 用法和BZPOPMAX一样的。时间复杂度,也是O(logN)。 127.0.0.1:6379 FLUSHALL
OK
127.0.0.1:6379 zadd key 10 zhangsan 20 lisi 30 wangwu
3
127.0.0.1:6379 zrange key 0 -1 withscores
zhangsan
10
lisi
20
wangwu
30
127.0.0.1:6379 zpopmin key
zhangsan
10
127.0.0.1:6379 zpopmin key 2
lisi
20
wangwu
30-- 客户端1
-- 没有元素进行阻塞等待
127.0.0.1:6379 BZPOPMIN key 600
-- 客户端2
127.0.0.1:6379 zadd key 10 zhangsan 20 lisi 30 wangwu
(integer) 3
-- 客户端1
-- 集合中有元素就立刻取出
-- 有元素后获取元素不会阻塞等待
127.0.0.1:6379 BZPOPMIN key 600
1) key
2) zhangsan
3) 10
(89.55s)
127.0.0.1:6379 BZPOPMIN key 600
1) key
2) lisi
3) 20
127.0.0.1:6379 BZPOPMIN key 600
1) key
2) wangwu
3) 30zrank,zrevrank,zscore zrank返回指定元素的排名,升序。 语法ZRANK key member 时间复杂度O(logN) zrank得到的下标,是从前往后算的(升序) zrevrank也是获取到member的下标。但是是反着算的。rev reverse 语法ZREVRANK key member 时间复杂度O(logN) zscore返回指定元素的分数。 语法ZSCORE key member 时间复杂度:0(1) 127.0.0.1:6379 flushall
OK
127.0.0.1:6379 zadd key 10 zhangsan 20 lisi 30 wangwu 40 zhaoliu
(integer) 4
127.0.0.1:6379 zrank key lisi
(integer) 1
127.0.0.1:6379 zrank key wangwu
(integer) 2
127.0.0.1:6379 zrank key aaa
(nil)
127.0.0.1:6379 zrevrank key lisi
(integer) 2
127.0.0.1:6379 zrevrank key wangwu
(integer) 1
127.0.0.1:6379 zrevrank key zhaoliu
(integer) 0
127.0.0.1:6379 zscore key zhangsan
10
127.0.0.1:6379 zscore key lisi
20zrem,zremrangebyrank,zremrangebyscore zrem删除指定的元素。 语法ZREM key member [member …] O(logN * M)参数中member的个数。N是整个有序集合中元素个数。 zremrangebyrank按照排序,升序删除指定范围(下标)的元素,左闭右闭。 语法ZREMRANGEBYRANK key start stop 时间复杂度O(logN M) N整个有序集合的元素个数。M是start-stop区间中元素个数。此处查找位置,只需要进行一次(不需要重复进行) zremrangebyscore按照分数删除指定范围的元素,左闭右闭。 语法ZREMRANGEBYSCORE key min max 时间复杂度:O(log(N)M) 返回值:本次操作删除的元素个数。
127.0.0.1:6379 flushall
OK
127.0.0.1:6379 zadd key 10 zhangsan 20 lisi 30 wangwu 40 zhaoliu
(integer) 4
127.0.0.1:6379 ZRANGE key 0 -1 withscores
1) zhangsan
2) 10
3) lisi
4) 20
5) wangwu
6) 30
7) zhaoliu
8) 40
127.0.0.1:6379 zrem key zhangsan
(integer) 1
127.0.0.1:6379 zrem key lisi wangwu
(integer) 2
-- ZREMRANGEBYRANK
127.0.0.1:6379 flushall
OK
127.0.0.1:6379 zadd key 10 zhangsan 20 lisi 30 wangwu 40 zhaoliu
(integer) 4
127.0.0.1:6379 ZREMRANGEBYRANK key 1 2
(integer) 2
127.0.0.1:6379 zrange key 0 -1
1) zhangsan
2) zhaoliu
-- ZREMRANGEBYSCORE
127.0.0.1:6379 flushall
OK
127.0.0.1:6379 zadd key 10 zhangsan 20 lisi 30 wangwu 40 zhaoliu
(integer) 4
127.0.0.1:6379 ZREMRANGEBYSCORE key 20 30
(integer) 2
127.0.0.1:6379 zrange key 0 -1
1) zhangsan
2) zhaoliuzincrby zincrby为指定的元素的关联分数添加指定的分数值。 语法ZINCRBY key increment member 不光会修改分数内容。也能同时移动元素位置.保持整个有序集合仍然是升序的。 127.0.0.1:6379 flushall
OK
127.0.0.1:6379 zadd key 10 zhangsan 20 lisi 30 wangwu 40 zhaoliu
(integer) 4
127.0.0.1:6379 ZINCRBY key 15 zhangsan
25
127.0.0.1:6379 zrange key 0 -1 withscores
1) lisi
2) 20
3) zhangsan
4) 25
5) wangwu
6) 30
7) zhaoliu
8) 40
127.0.0.1:6379 ZINCRBY key -15 zhangsan
10
127.0.0.1:6379 zrange key 0 -1 withscores
1) zhangsan
2) 10
3) lisi
4) 20
5) wangwu
6) 30
7) zhaoliu
8) 40
127.0.0.1:6379 ZINCRBY key 0.5 zhangsan
10.5
127.0.0.1:6379 zrange key 0 -1 withscores
1) zhangsan
2) 10.5
3) lisi
4) 20
5) wangwu
6) 30
7) zhaoliu
8) 40集合间的操作
交集zinterstore zinterstore求有序集合的交集结果放到第三张表中 语法ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight] [weight …]] [AGGREGATE SUM |MIN | MAX] numkeys整数,描述了后续有几个key参与交集运算 WEIGHTS权重 AGGREGATE要把结果存储到哪个key对应的zset中。 时间复杂度:O(NK)O(Mlog(M))N是输入的有序集合中,最小的有序集合的元素个数;K是输入了几个有序集合;M是最终结果的有序集合的元素个数. 127.0.0.1:6379 flushall
OK
127.0.0.1:6379 zadd key 10 zhangsan 20 lisi 30 wangwu
(integer) 3
127.0.0.1:6379 zadd key2 15 zhangsan 25 lisi 35 zhaoliu
(integer) 3
127.0.0.1:6379 ZINTERSTORE key3 2 key key2
(integer) 2
127.0.0.1:6379 ZRANGE key3 0 -1 withscores
1) zhangsan
2) 25
3) lisi
4) 45
-- WEIGHTS 权重交集
127.0.0.1:6379 ZINTERSTORE key4 2 key key2 weights 2 3
(integer) 2
127.0.0.1:6379 zrange key4 0 -1 withscores
1) zhangsan
2) 65
3) lisi
4) 115
-- AGGREGATE最大数交集
127.0.0.1:6379 ZINTERSTORE key5 2 key key2 AGGREGATE max
(integer) 2
127.0.0.1:6379 zrange key5 0 -1 withscores
1) zhangsan
2) 15
3) lisi
4) 25
-- AGGREGATE最小数交集
127.0.0.1:6379 ZINTERSTORE key6 2 key key2 AGGREGATE min
(integer) 2
127.0.0.1:6379 zrange key6 0 -1 withscores
1) zhangsan
2) 10
3) lisi
4) 20并集zunionstore zunionstore求有序结合的并集 语法ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight] [weight …]] [AGGREGATE SUM | MIN | MAX] zunionstore用法和zinterstore基本一致. 127.0.0.1:6379 flushall
OK
127.0.0.1:6379 zadd key 10 zhangsan 20 lisi 30 wangwu
(integer) 3
127.0.0.1:6379 zadd key2 15 zhangsan 25 lisi 35 zhaoliu
(integer) 3
127.0.0.1:6379 ZUNIONSTORE key3 2 key key2
(integer) 4
127.0.0.1:6379 zrange key3 0 -1 withscores
1) zhangsan
2) 25
3) wangwu
4) 30
5) zhaoliu
6) 35
7) lisi
8) 45
-- 根据权重求交集
127.0.0.1:6379 ZUNIONSTORE key4 2 key key2 weights 0.5 0.5
(integer) 4
127.0.0.1:6379 zrange key4 0 -1 withscores
1) zhangsan
2) 12.5
3) wangwu
4) 15
5) zhaoliu
6) 17.5
7) lisi
8) 22.5
--
127.0.0.1:6379 ZUNIONSTORE key5 2 key key2 aggregate min
(integer) 4
127.0.0.1:6379 zrange key5 0 -1 withscores
1) zhangsan
2) 10
3) lisi
4) 20
5) wangwu
6) 30
7) zhaoliu
8) 35
127.0.0.1:6379 ZUNIONSTORE key6 2 key key2 aggregate max
(integer) 4
127.0.0.1:6379 zrange key6 0 -1 withscores
1) zhangsan
2) 15
3) lisi
4) 25
5) wangwu
6) 30
7) zhaoliu
8) 35数据类型
如果有序集合中的元素个数较少,或者单个元素体积较小。使用ziplist来存储。
如果当前元素个数比较多或者单个元素体积非常大。使用skiplist来存储了。
127.0.0.1:6379 flushall
OK
127.0.0.1:6379 zadd key 10 zhangsan 20 lisi 30 wangwu
(integer) 3
127.0.0.1:6379 object encoding key
ziplist
127.0.0.1:6379 zadd key 40 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
(integer) 1
127.0.0.1:6379 object encoding key
skiplist