系统学习redis之七——redis数据类型之zset数据类型及操作

sourted sets数据类型介绍

sorted set是set的一个升级版本,他在set的基础上增加了一个顺序属性。这一属性在修改元素的时候可以指定,每次指定后,zset会自动按照新的值调整顺序,是有序集合。可以理解为有两列的MySQL表,一列存value,一列存顺序。操作中key理解为zset的名字。

zset数据类型方法

  • zadd:向指定集合zset中添加元素member,score用于排序,如果该元素已经存在,则更新其顺序
  • zrange:查看sourted sets里面的所有元素
  • zrem:删除名称为key的zset中的元素member(即删除指定zset里面的指定元素)
  • zincrby:如果在某一个zset中已经存在元素member,则该元素的score增加increment。否则向该集合中添加该元素,其score的值就为指定的increment值
  • zrank:返回某一个zset中指定元素的索引值(不是插入的时候指定的那个顺序值,是元素的下标)。这个索引值是按照元素的score值从小到大排列的,score值越小,索引值(下标)就越小,score值越大,索引值(下标)就越大
  • zrevrank:返回某一个zset中指定元素的索引值(不是插入的时候指定的那个顺序值,是元素的下标)。这个索引值是按照元素的score值从大到小排列的,score值越小,索引值(下标)就越大,score值越大,索引值(下标)就越小
  • zrevrange:返回某一个zset集合中的指定区间的元素及其顺序值,按照score值从大到小降序排列,与zrange相反
  • zrangebyscore:返回集合中指定顺序值区间的元素
  • zcount:返回集合中指定顺序值区间的元素总数量
  • zcard:返回集合中的所有元素个数
  • zremrangebyrank:删除在集合中排名在给定索引值(下标)区间的元素(注意:是按照索引值删除,这里不是顺序值)
  • zremrangebyscore:删除在集合中排名在给定顺序值区间的元素(注意:是按照顺序值删除,这里不是索引值)

方法及操作

1)zadd:向指定集合zset中添加元素member,score用于排序,如果该元素已经存在,则更新其顺序
例如:向sset1中添加one和two两个元素并指定顺序

[[email protected] redis-4.0.1]# src/redis-cli
127.0.0.1:6379> ZADD sset1 1 one    #向sset1中添加元素“one”,并指定顺序为1
(integer) 1                         #返回值为1,表示添加成功
127.0.0.1:6379> ZADD sset1 2 two    #向sset1中添加元素“two”,并指定顺序为2
(integer) 1
127.0.0.1:6379> ZADD sset1 3 two    #向sset1中添加元素“two”,并指定顺序为3
(integer) 0                     #集合中不能有重复元素,所以这里返回的是0,表示重复添加元素“two”是失败的,但是会刷新元素“two”的顺序,将原来的2改成3
127.0.0.1:6379> ZRANGE sset1 0 -1   #查看sset里面的所有元素,这里的0和-1也是代表元素的下标。这里是看不到设置的顺序的,要看顺序,就要加上WITHSCORES
1) "one"
2) "two"
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES        #查看sset的所有元素机器对应的顺序
1) "one"
2) "1"
3) "two"
4) "3"      #这里就是第二次添加元素“two”的时候将顺序从2改成了3
127.0.0.1:6379> 

备注,同《系统学习redis之三——redis数据类型之string类型及操作》一样,后面的例子也都在同一台机器一次性操作完毕的,因为后面的代码如果不加上“ [[email protected] redis-4.0.1]# src/redis-cli ”这一句。代码高亮也会格式有问题,所以后面所有的例子中都加上了“[[email protected] redis-4.0.1]# src/redis-cli ”,只是为了格式问题。

2)zrange:查看sourted sets里面的所有元素
例如:上面例子中查看sset1中的全部元素

[[email protected] redis-4.0.1]# src/redis-cli
127.0.0.1:6379> ZRANGE sset1 0 -1
1) "one"
2) "two"

3)zrem:删除名称为key的zset中的元素member(即删除指定zset里面的指定元素)
例如:删除sset1中的元素one

[[email protected] redis-4.0.1]# src/redis-cli
user127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES   #查看当前sset1里面的全部元素
1) "one"
2) "1"
3) "two"
4) "3"
127.0.0.1:6379> ZREM sset1 one   #删除sset1的元素“one”
(integer) 1
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES    #再查看sset1的元素,one已经被删除成功
1) "two"
2) "3"
127.0.0.1:6379> 

4)zincrby:如果在某一个zset中已经存在元素member,则该元素的score增加increment。否则向该集合中添加该元素,其score的值就为指定的increment值
例如:给sset1的某个元素增加顺序值

[[email protected] redis-4.0.1]# src/redis-cli
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES  #当前sset1中只有一个元素“two”,顺序为3
1) "two"
2) "3"
127.0.0.1:6379> ZINCRBY sset1 2 two     #给元素“two”的顺序加上2
"5"     #返回的就是元素“two”的顺序被增加之后的值
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES            #再查看sset1的值,two的顺序已经变成了5
1) "two"
2) "5"
127.0.0.1:6379> ZINCRBY sset1 -1 two        #当值变成负值,顺序值就会减小
"4"
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES
1) "two"
2) "4"
127.0.0.1:6379> ZINCRBY sset1 2 one     #给sset1中的元素“one”增加元素值2.因为sset1中不存在元素"one",所以这里会插入元素“one”,并设置期顺序值为2
"2"
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES    #查看当前sset1的所有元素
1) "one"
2) "2"
3) "two"
4) "4"
127.0.0.1:6379> 

5)zrank:返回某一个zset中指定元素的索引值(不是插入的时候指定的那个顺序值,是元素的下标)。这个索引值是按照元素的score值从小到大排列的,score值越小,索引值(下标)就越小,score值越大,索引值(下标)就越大
例如:查看sset2中元素“two”的索引值

[[email protected] redis-4.0.1]# src/redis-cli
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES
1) "one"
2) "1"
3) "two"    #插入two,设置的顺序值是2
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> ZRANK sset2 two  #返回元素“two”的索引值,即下标
(integer) 1     #这里的1就是表示元素“two”的索引值(下标)。one的下标是0,two的下标就是1
127.0.0.1:6379> 

6)zrevrank:返回某一个zset中指定元素的索引值(不是插入的时候指定的那个顺序值,是元素的下标)。这个索引值是按照元素的score值从大到小排列的,score值越小,索引值(下标)就越大,score值越大,索引值(下标)就越小
例如:用zrevrank查看sset2中各元素的下标值

[[email protected] redis-4.0.1]# src/redis-cli
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> ZREVRANK sset2 one  #元素“one”的score值最小,索引值最大
(integer) 2
127.0.0.1:6379> ZREVRANK sset2 two
(integer) 1
127.0.0.1:6379> ZREVRANK sset2 three  #元素“three”的score值最大,索引值最小
(integer) 0
127.0.0.1:6379> 

7)zrevrange:返回某一个zset集合中的指定区间的元素及其顺序值,按照score值从大到小降序排列,与zrange相反
例如:使用zrevrange返回sset2中所有的元素及其顺序值

[[email protected] redis-4.0.1]# src/redis-cli
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES   #先用zrange查看sset2中的元素及其顺序值,是按照从小到大升序排列的
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379>
127.0.0.1:6379> ZREVRANGE sset2 0 -1 WITHSCORES  #先用zrevrang查看sset2中的元素及其顺序值,是按照从大到小降序排列的
1) "three"
2) "3"
3) "two"
4) "2"
5) "one"
6) "1"

8)zrangebyscore:返回集合中指定顺序值区间的元素
例如:返回sset2中指定顺序值区间的元素

[[email protected] redis-4.0.1]# src/redis-cli
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES   #查看sset2中所有元素及其顺序值
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> ZRANGEBYSCORE sset2 1 2 WITHSCORES   #查看sset2中顺序值为1到2的元素
1) "one"
2) "1"
3) "two"
4) "2"
127.0.0.1:6379> ZRANGEBYSCORE sset2 2 3 WITHSCORES   #查看sset2中顺序值为2到3的元素
1) "two"
2) "2"
3) "three"
4) "3"
127.0.0.1:6379>
127.0.0.1:6379> ZRANGEBYSCORE sset2 1 3 WITHSCORES    #查看sset2中顺序值为1到3的元素
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379>

9)zcount:返回集合中指定顺序值区间的元素总数量
例如:返回sset2中指定顺序值区间的元素数量

[[email protected] redis-4.0.1]# src/redis-cli
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES        查看sset2中所有元素及其顺序值
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> ZCOUNT sset2 1 2    #查看sset2中顺序值从1到2的元素个数
(integer) 2         #这里的2就代表的元素个数
127.0.0.1:6379> ZCOUNT sset2 2 3  #查看sset2中顺序值从2到3的元素个数
(integer) 2
127.0.0.1:6379> ZCOUNT sset2 1 3   #查看sset2中顺序值从1到3的元素个数
(integer) 3
127.0.0.1:6379> 

10)zcard:返回集合中的所有元素个数
例如:查看sset2中所有元素个数

[[email protected] redis-4.0.1]# src/redis-cli
127.0.0.1:6379> ZRANGE sset2 0 -1       #查看sset2中所有元素,总共3个
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> ZCARD sset2     #使用zcard返回sset2中元素总数
(integer) 3         #这里的3就表示元素总数量
127.0.0.1:6379>

11)zremrangebyrank:删除在集合中排名在给定索引值(下标)区间的元素(注意:是按照索引值删除,这里不是顺序值)
例如:删除sset2中是定索引区间的元素

[[email protected] redis-4.0.1]# src/redis-cli
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES    #当前sset2中所有元素
 1) "one"
 2) "1"
 3) "two"
 4) "2"
 5) "three"
 6) "3"
 7) "four"
 8) "4"
 9) "five"
10) "5"
127.0.0.1:6379> ZREMRANGEBYRANK sset2 3 4    #删除索引值从3到4这个区间的元素
(integer) 2       #2表示删除元素的个数
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES     #索引值从0开始,元素“four”的索引值是3,元素“five”的索引值是4,都给删除了
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> ZREMRANGEBYRANK sset2 1 1   #索引区间的开始值和结束值可以是一样的,就只删除1个元素
(integer) 1
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES    #索引值为1的元素“two”给删除了
1) "one"
2) "1"
3) "three"
4) "3"
127.0.0.1:6379> 

12)zremrangebyscore:删除在集合中排名在给定顺序值区间的元素(注意:是按照顺序值删除,这里不是索引值)
例如:删除sset2中是定顺序区间的元素

[[email protected] redis-4.0.1]# src/redis-cli
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES   #当前sset2中所有元素
 1) "one"
 2) "1"
 3) "two"
 4) "2"
 5) "three"
 6) "3"
 7) "four"
 8) "4"
 9) "five"
10) "5"
127.0.0.1:6379> ZREMRANGEBYSCORE sset2 2 4  #顺序值从1开始,元素“two”的索引值是2,元素“four”的索引值是4,都给删除了
(integer) 3
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES
1) "one"
2) "1"
3) "five"
4) "5"
127.0.0.1:6379> ZREMRANGEBYSCORE sset2 5 5  #顺序区间的开始值和结束值可以是一样的,就只删除1个元素
(integer) 1
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES
1) "one"
2) "1"
127.0.0.1:6379> 

原文地址:http://blog.51cto.com/10950710/2163470

时间: 2024-09-30 06:53:12

系统学习redis之七——redis数据类型之zset数据类型及操作的相关文章

Linux系统学习之路和常用命令及其他系统相关内容

Linux系统学习之路 目录 Linux系统学习之路[第一篇]:Linux目录和基础知识 Linux系统学习之路[第二篇]:文件操作,文件查看,find查找 Linux系统学习之路[第三篇]:grep,vim,压缩功能详解 Linux系统学习之路[第四篇]:mount,rpm,yum,yum组讲解 Linux系统学习之路[第五篇]:用户和用户组管理 Linux系统学习之路[第六篇]:权限管理 Linux系统学习之路[第七篇]:磁盘和文件管理 Linux系统学习之路[第八篇]:LVM逻辑卷和RAI

系统学习redis之一——基础概念

前言: redis集群搭建过很多次,也用过一些基础的命令,能解决一些常规的异常.但是因为平时对数据这块用得不多,一直没有很系统的学习过redis.这次将redis的知识好好学习了一下,记录为学习笔记<系统学习redis>系列. NoSQL介绍 非关系型数据库:NoSQL关系型数据库:MySQL.SQLserver.Oracle 关系型数据库在web2.0上对高并发,暴露出了一些性能问题 NoSQL 是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,

系统学习redis之八——redis常用命令

redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在linux终端使用,包括以下两种:1.键值相关命令2.服务器相关命令 redis命令介绍 一.键值相关命令 key:返回满足给定匹配条件的所有key.用表达式*代表取出所有的key exists:确认一个key是否存在,存在即返回1,不存在就返回0 del:删除一个key expire:设置一个key的过期时间 persist:移除给定的key的过期时间 randomkey:随机返回数据库里面的一个key rename:重

Redis系统学习 三、使用数据结构

前言:上一章,简单介绍了5种数据结构,并给出了一些用例.现在是时候来看看一些高级的,但依然很常见的主题和设计模式 一.大O表示法(Big O Notation ) 常用时间复杂度O(1)被认为是最快速的,无论我们是在处理5个元素还是5百万个元素,最终都能得到相同的性能.对于sismember命令,其作用是告诉我们一个值是否属于一个集合,时间复杂度为O(1).sismember命令很强大,强大的一部分原因是其高效的性能特征.许多Redis命令都具有O(1)的时间复杂度 对数的时间复杂度 O(log

Redis学习二:Redis入门介绍

一.入门概述 1.是什么 Redis:REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器. Redis 与其他 key - value 缓存产品(memcached)有以下三个特点: 1)持久化:Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再

Redis(八):zset/zadd/zrange/zrembyscore 命令源码解析

前面几篇文章,我们完全领略了redis的string,hash,list,set数据类型的实现方法,相信对redis已经不再神秘. 本篇我们将介绍redis的最后一种数据类型: zset 的相关实现. 本篇过后,我们对redis的各种基础功能,应该不会再有疑惑.有可能的话,我们后续将会对redis的高级功能的实现做解析.(如复制.哨兵模式.集群模式) 回归本篇主题,zset.zset 又称有序集合(sorted set),即是序版本的set.经过上篇的介绍,大家可以看到,redis的读取功能相当

【Redis】Redis学习(六) Redis 基本运维

Redis的单机搭建,主从搭建,Sentinal搭建,以及Redis集群搭建的步骤参照前面的文章.现在来说一下Redis的基本运维,毕竟如果一切正常是最好的,但是当出现问题不能使用的时候,准确定位问题,并解决才是最重要的. 一.配置文件 Redis的配置文件的注释还是很详细的,下面也把它贴出来: #redis.conf # Redis configuration file example. # ./redis-server /path/to/redis.conf ################

(一)Redis笔记——简介 、key 、数据类型

1.  Redis是什么.特点.优势 Redis是一个开源的使用C语言编写.开源.支持网络.可基于内存亦可持久化的日志型.高性能的Key-Value数据库,并提供多种语言的API. 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String).哈希(Map). 列表(list).集合(sets) 和 有序集合(sorted sets)等类型. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的

Redis学习总结之一——Redis初入

Redis简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是