redis学习笔记7--有序集合类型
2016-04-13 15:59
591 查看
有序集合类型(sorted set)特点在于“有序”二字。它在集合类型的基础上为集合中的每一个元素都关联了一个分数,这不仅可以用来完成插入、删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前N个元素、获得指定分数范围内的元素等与分数有关的操作。虽然集合中每个元素都是不同的,但是它们的分数却可以相同。
有序集合类型与列表类型的对比
# 相似点:
1). 二者都是有序的。
2). 二者都可以获得某一范围的元素。
# 异同点:
1). 列表类型是通过链表实现的,获得靠近两端的元素速度极快,当元素增多后,访问中间数据的速度回较慢。
2). 有序集合类型是使用散列表和跳跃表(Skip list)实现的,所以即使读取位于中间部分的数据速度也很快(时间复杂度O(logN))。
3). 列表中不能简单地调整某个元素的位置,但是有序集合可以(通过更改元素的分数)。
4). 有序集合类型比列表类型更耗内存。
// 命令
1. 增加元素
4. 获得指定分数范围的元素
# 不包含端点值,可以在分数前加上“(”符号,例如:80~100,可以包含80,不可以包含100
# 获取分数低于或等于100的前3笔数据
有序集合类型与列表类型的对比
# 相似点:
1). 二者都是有序的。
2). 二者都可以获得某一范围的元素。
# 异同点:
1). 列表类型是通过链表实现的,获得靠近两端的元素速度极快,当元素增多后,访问中间数据的速度回较慢。
2). 有序集合类型是使用散列表和跳跃表(Skip list)实现的,所以即使读取位于中间部分的数据速度也很快(时间复杂度O(logN))。
3). 列表中不能简单地调整某个元素的位置,但是有序集合可以(通过更改元素的分数)。
4). 有序集合类型比列表类型更耗内存。
// 命令
1. 增加元素
[root@localhost ~]# docker exec -it redis1 redis-cli 127.0.0.1:6379> zadd scoreboard 89 Tom 67 Peter 100 David (integer) 3 127.0.0.1:6379> zadd testboard 17E+307 a (integer) 1 127.0.0.1:6379> zadd testboard 1.5 b (integer) 1 127.0.0.1:6379> zadd testboard +inf c # +inf 正无穷 (integer) 1 127.0.0.1:6379> zadd testboard -inf d # -inf 负无穷 (integer) 12. 获得元素的分数
127.0.0.1:6379> zscore scoreboard Tom "89"3. 获得排名在某个范围的元素列表
127.0.0.1:6379> zrange scoreboard 0 2 1) "Peter" 2) "Tom" 3) "David" 127.0.0.1:6379> zrange scoreboard 1 -1 1) "Tom" 2) "David" 127.0.0.1:6379> zrange scoreboard 0 -1 1) "Peter" 2) "Tom" 3) "David" 127.0.0.1:6379> zrange scoreboard 0 -1 withscores # 带上分数 1) "Peter" 2) "76" 3) "Tom" 4) "89" 5) "David" 6) "100" 127.0.0.1:6379> zrange testboard 0 2 withscores 1) "d" 2) "-inf" 3) "b" 4) "1.5" 5) "a" 6) "1.6999999999999999e+308"
4. 获得指定分数范围的元素
127.0.0.1:6379> zrangebyscore scoreboard 80 100 1) "Tom" 2) "David"
# 不包含端点值,可以在分数前加上“(”符号,例如:80~100,可以包含80,不可以包含100
127.0.0.1:6379> zadd scoreboard 56 Jerry 92 Wendy 67 Yvonne (integer) 3 127.0.0.1:6379> zrange scoreboard 0 -1 withscores 1) "Jerry" 2) "56" 3) "Yvonne" 4) "67" 5) "Peter" 6) "76" 7) "Tom" 8) "89" 9) "Wendy" 10) "92" 11) "David" 12) "100"# 获得分数高于60分的从第二个人开始的3笔数据
127.0.0.1:6379> zrangebyscore scoreboard 60 +inf limit 1 3 1) "Peter" 2) "Tom" 3) "Wendy" 127.0.0.1:6379> zrangebyscore scoreboard 60 +inf withscores limit 1 3 1) "Peter" 2) "76" 3) "Tom" 4) "89" 5) "Wendy" 6) "92"
# 获取分数低于或等于100的前3笔数据
127.0.0.1:6379> zrevrangebyscore scoreboard 100 0 limit 0 3 1) "David" 2) "Wendy" 3) "Tom" 127.0.0.1:6379> zrevrangebyscore scoreboard 100 0 limit 0 3 withscores 1) "David" 2) "100" 3) "Wendy" 4) "92" 5) "Tom" 6) "89"5. 增加某个元素的分数
127.0.0.1:6379> zscore scoreboard Jerry "56" 127.0.0.1:6379> zincrby scoreboard 4 Jerry "60" 127.0.0.1:6379> zincrby scoreboard -4 Jerry "56"6. 获得集合中元素的数量
127.0.0.1:6379> zcard scoreboard (integer) 67. 获得指定分数范围内的元素个数
127.0.0.1:6379> zcount scoreboard 90 100 (integer) 2 127.0.0.1:6379> zcount scoreboard (89 +inf (integer) 28. 删除一个或多个元素
127.0.0.1:6379> zrem scoreboard Wendy (integer) 1 127.0.0.1:6379> zcard scoreboard (integer) 59. 按照排名范围删除元素
127.0.0.1:6379> zadd testRem 1 a 2 b 3 c 4 d 5 e 6 f (integer) 6 127.0.0.1:6379> zrange testRem 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 6) "f" 127.0.0.1:6379> zremrangebyrank testRem 0 2 (integer) 3 127.0.0.1:6379> zrange testRem 0 -1 1) "d" 2) "e" 3) "f"10. 按照分数范围删除元素
127.0.0.1:6379> zremrangebyscore testRem (4 5 (integer) 1 127.0.0.1:6379> zrange testRem 0 -1 1) "d" 2) "f"11. 获得元素的排名
127.0.0.1:6379> zrange scoreboard 0 -1 1) "Batman" 2) "Jerry" 3) "Yvonne" 4) "Peter" 5) "Tom" 6) "David" 127.0.0.1:6379> zrank scoreboard Peter (integer) 3 127.0.0.1:6379> zrevrank scoreboard Peter (integer) 2
相关文章推荐
- redis安装问题小结
- 使用 Redis 和 Python 构建一个共享单车的应用程序
- Redis偶发连接失败案例实战记录
- set 命令特殊用法
- Redis中实现查找某个值的范围
- redis的hGetAll函数的性能问题(记Redis那坑人的HGETALL)
- Redis和Memcached的区别详解
- 分割超大Redis数据库例子
- Redis总结笔记(一):安装和常用命令
- Redis sort 排序命令详解
- 用Redis实现微博关注关系
- redis中修改配置文件中的端口号 密码方法
- 在Ruby on Rails上使用Redis Store的方法
- You must SET PASSWORD before executing this statement的解决方法
- Redis和Memcache的区别总结
- 批处理 Set 命令详解 让你理解set命令第1/2页
- ASP中set与dim的区别(自己的理解)
- 在Node.js应用中使用Redis的方法简介
- 深入C#中get与set的详解
- Redis服务器的启动过程分析