`

redis命令(5)--有序集合类型(zset)

 
阅读更多

有序集合类型是使用散列表和跳跃表(Skip list)实现的,所以即使读取位于中间部分的数据速度也很快(时间复杂度是O(log(N)))。

 

有序集合类型中元素唯一性,有序性。

有序是按照元素的分值排序,分值是添加元素时指定的,可以改变元素的分值从而改变元素的顺序。

 

以下命令中的key 为有序集合的key(键名)

 

 

1.添加元素

ZADD key score value[score value…]

向有序集合中添加一个或多个元素,元素值为value ,对应的分值为score ,如果集合中不存在value,则添加,否则更改该元素的分值==score

score 可以为整型或浮点型 ,特殊值:+inf 正无穷 -inf负元穷

 

localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zadd ranking 83 mi
(integer) 0

 2.获取元素的分值

zscore key value

 

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zscore ranking iphone
"90"
 

 

3.按排名范围查询元素,返回值按由小到大的顺序排列

ZRANGE key  startIndex , endIndex [WITHSCORES]

添加到有序集合中的元素会按分值由小到大排名。

排名写法:

1.分值最小的排名为0 ,分值最大的排名等于元素个数-1,

2.分值最大的排名为-1,分值最小的排名等于负的元素个数

如:有10个元素的有序集合:

1.元素值最小的排名为0 ,元素值最大的排名为9,

元素值最小的排名为-10 ,元素值最大的排名为-1,

 

 

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zrange ranking 0 3
1) "mi"
2) "sony"
3) "huawei"
4) "iphone"
localhost:6379> zrange ranking 0 -1
1) "mi"
2) "sony"
3) "huawei"
4) "iphone"
localhost:6379> zrange ranking -2 -1
1) "huawei"
2) "iphone"
localhost:6379> zrange ranking -1 -2
(empty list or set)
 如果需要返回分值,则zrange 命令最后面增加:WITHSCORES

 

 

localhost:6379> zrange ranking 0 -1 withscores
1) "mi"
2) "78"
3) "sony"
4) "80"
5) "huawei"
6) "82"
7) "iphone"
8) "90"
 4.按排名范围查询元素,返回值按由大到小的顺序排列

 

ZREVRANGE key  startIndex , endIndex  [WITHSCORES]

 zrevrange 与zrange 命令相同,只是返回值按由大到小顺序排列

 

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zrevrange ranking 0 -1
1) "iphone"
2) "huawei"
3) "sony"
4) "mi"
localhost:6379> zrevrange ranking 0 3
1) "iphone"
2) "huawei"
3) "sony"
4) "mi"
localhost:6379> zrevrange ranking -4 -1
1) "iphone"
2) "huawei"
3) "sony"
4) "mi"
 5.按分值范围查询元素,返回值按元素分值小到大排序

 

ZRANGEBYSCORE key minScore maxScore [WITHSCROES] [LIMIT  offset count]

查询分值>=minScore  && 分值<=maxScore 的元素。

(分值可以使用-inf负无穷大+inf正无穷大)

("("+分值 代表不包含该分值)

 

WITHSCROES :返回值中带有元素的分值

[LIMIT  offset count]:在查询结果的元素中,以排序在offset 位置开始取count个元素,offset由0开始

 

 

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zrangebyscore ranking 80 90
1) "sony"
2) "huawei"
3) "iphone"
localhost:6379> zrangebyscore ranking 80 90  withscores
1) "sony"
2) "80"
3) "huawei"
4) "82"
5) "iphone"
6) "90"
localhost:6379> zrangebyscore ranking 80 90 withscores
1) "sony"
2) "80"
3) "huawei"
4) "82"
5) "iphone"
6) "90"
localhost:6379> zrangebyscore ranking 80 90 withscores limit 0 2
1) "sony"
2) "80"
3) "huawei"
4) "82"
 

 

6.增加某个元素的分值

Z INCRBY key increment value

 

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zrange ranking 0 -1 withscores
1) "mi"
2) "78"
3) "sony"
4) "80"
5) "huawei"
6) "82"
7) "iphone"
8) "90"
localhost:6379> zincrby ranking 8 mi
"86"
localhost:6379> zrange ranking 0 -1 withscores
1) "sony"
2) "80"
3) "huawei"
4) "82"
5) "mi"
6) "86"
7) "iphone"
8) "90"
 

 

7.获取有序集合中的元素个数

ZCARD key

 

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4

localhost:6379> zcard ranking
(integer) 4
 8.获取指定分值范围的元素的个数

 

ZCOUNT key minScore maxScore

 

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4

localhost:6379> zcount ranking 80 90
(integer) 2
 9.删除一个或多个元素,返回删 除元素的个数

 

ZREM key value1 value2 value...

 

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4


localhost:6379> zrem ranking sony mi
(integer) 2
localhost:6379> zrange ranking 0 -1
1) "huawei"
2) "iphone"

 10.按排名范围删除元素

ZREMRANGEBYRANK key startIndex endIndex

localhost:6379> del ranking
(integer) 1
localhost:6379>  zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zremrangebyrank ranking 0 2
(integer) 3
localhost:6379> zrange ranking 0 -1
1) "iphone"

 11.按分值范围删除元素

ZREMRANGEBYSCORE key minScore maxScore

localhost:6379>  del ranking
(integer) 1
localhost:6379>  zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zremrangebyscore ranking 70 80
(integer) 2
localhost:6379> zrange ranking 0 -1
1) "huawei"

 12.获取元素的排名

ZRANK key value //返回元素值==value的元素的排名 (由小到到的排名顺序,最小值排名为0)

 

ZREVRANK key value  //返回元素值==value的元素的排名 (由大到小的排名顺序,最大值排名为0)

localhost:6379> del ranking
(integer) 1
localhost:6379>  zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zrank ranking sony
(integer) 1
localhost:6379> zrevrank ranking sony
(integer) 2
localhost:6379> zrank ranking iphone
(integer) 3
localhost:6379> zrevrank ranking iphone
(integer) 0

 13.有序集合的交运算

ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]]

[AGREGATE SUM|MIN|MAX]

 

N个有序集合中相同元素分值计算,并将结果保存在目标有序集合中。

 

destination :交运算的结果保存到有序集合destination 中

numkeys :指定参与计算的有序集合的个数

key [key …]:参与计算的有序集合

[WEIGHTS weight [weight …]]:可选参数,指定参与计算的每一个集合的权重,计算时,集合中元素的分值乘以权重,再与其它集合计算

[AGREGATE SUM|MIN|MAX]:可选参数,默认为 集合中相同元素进行sum计算,可以指定为min 取小值或max 取最大值计算

 

localhost:6379> del testOne
(integer) 1
localhost:6379> del testTwo
(integer) 1
localhost:6379> zadd testOne 90 tom 80 carry 70 lisa
(integer) 3
localhost:6379> zadd testTwo 85 tom 95 carry 83 lisa
(integer) 3
localhost:6379> zinterstore testSumResult 2 testOne testTwo
(integer) 3
localhost:6379> zrange testSumResult 0 -1 withscores
1) "lisa"
2) "153"
3) "carry"
4) "175"
5) "tom"
6) "175"
localhost:6379> zinterstore testMinResult 2 testOne testTwo aggregate min
(integer) 3
localhost:6379> zrange testMinResult 0 -1 withscores
1) "lisa"
2) "70"
3) "carry"
4) "80"
5) "tom"
6) "85"
localhost:6379> zinterstore testMaxResult 2 testOne testTwo aggregate max
(integer) 3
localhost:6379> zrange testMaxResult 0 -1 withscores
1) "lisa"
2) "83"
3) "tom"
4) "90"
5) "carry"
6) "95"

 

 

分享到:
评论

相关推荐

    8-Redis常用命令-list-set-zset.docx

    Redis 是一个开源的、基于内存的数据结构存储系统,支持五种数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)及 zset(有序集合)。本文将详细介绍 Redis 的 List 类型的命令和应用场景。 ...

    redis-3.4.1-py2.py3-none-any.whl

    redis 是一个 Key-Value 数据库,Value 支持 string(字符串),list(列表),set(集合),zset(有序集合),hash(哈希类型)等类型。python连接redis需要的包,3.4.1版本

    redis-6.2.3-win64.zip

    Redis是一个开源的、基于内存的数据结构存储系统,支持多种数据类型,如字符串、哈希、列表、集合、有序集合。这些数据结构使得Redis在处理复杂的数据操作时具有高效性。它还支持发布/订阅模式,可以作为消息队列...

    Redis-for-windows-x64-2.8.2400

    和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更...

    redis高级应用-使用redis消息队列完成秒杀过期订单处理-讲义-教程

    和 Memcached 类似,它支持存储的 value 类型相对更多,包括 string(字符串)、list(连表)、set(集合)、zset(sorted set-有序集合)和 hash(哈希类型)。这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及...

    Redis-x64-5.0.10

    它支持存储的value类型很多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些...

    Redis-x64-5.0.9.msi

    和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子...

    redis-linux-7.2.1

    redis是一个以key-value存储的数据库结构型服务器,它支持的数据结构类型包括:字符串(String)、链表(lists)、哈希表(hash)、集合(set)、有序集合(Zset)等。为了保证读取的效率,redis把数据对象都存储在...

    redis-x64-3.2.1

    和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更...

    redis常用命令集合.pdf

    - ZSet(有序集合):带有分数的无序且不可重复的序列,适用于排行榜系统。 2. Redis的优点 - 读写速度快:数据存储在内存中,相较于传统磁盘数据库有更快的响应速度。 - 数据类型丰富:提供了灵活的数据结构...

    redis-core-java.zip

    和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更...

    Redis-x64-4.0.14

    redis安装版 直接可以运行在windows端。。redis是一个key-value...和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。

    Redis-x64-3.2.100.rar

    - **有序集合操作**:如`ZADD zset score member`插入有序集合成员,`ZRANGE zset start stop [WITHSCORES]`按分数范围获取成员。 4. **Redis配置**: - **配置文件**:Redis默认使用`redis.conf`配置文件,包括...

    redis-3.2.0-win64

    处理有序集合(sorted sets)的命令 (zsets) ZADD key score member 添加指定成员到有序集合中,如果目标存在则更新score(分值,排序用) ZREM key member 从有序集合删除指定成员 ZINCRBY key increment member ...

    Python库 | types_redis-0.1.9-py2.py3-none-any.whl

    6. 使用有序集合:`r.zadd('zset_key', score, 'member')`插入有序集合,`r.zrange('zset_key', 0, -1, withscores=True)`按分数排序并获取成员及其分数。 此外,`types_redis`库可能还包含了事务处理、发布/订阅...

    Redis全套学习笔记-带章节目录-114页.pdf

    * 有序集合(Zset):有序集合是Redis的一种数据类型,使用zadd命令添加元素,zrange命令获取指定索引范围内的元素。 Redis发布和订阅 * 发布和订阅是Redis的一种消息队列机制,允许客户端订阅一个或多个频道,...

    Redis-x64-3.2.100.zip

    和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更...

    redis命令实践NewLife.Redis-master.zip

    - 玩转有序集合:`redis.ZAdd("zset", 1, "member1", 2, "member2"); var sortedMembers = redis.ZRange("zset", 0, -1, true);` 通过NewLife.Redis,你可以在.NET应用中轻松地利用Redis的强大功能。在实际项目中,...

    redis使用总结--原理、持久化、常见问题等等

    其特点是读写速度极高,支持多种数据结构,包括字符串(string)、哈希(hash)、列表(list)、集合(set)和有序集合(zset)。这些数据类型在不同的场景下有各自的应用,例如字符串可用来存储验证码、ID 或 JSON 对象;哈希...

Global site tag (gtag.js) - Google Analytics