redis的sorted set类型
1、简单描述
和set类型一样,sorted set也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score。sorted set的实现是skip list和hash table的混合体。当元素被添加到集合中时,一个元素到score的映射被添加到hash table中,所以给定一个元素获取score的开销是O(1),另外就是score到元素的映射是被添加到skip list,并且按照score排序,所以是有序的。添加和删除操作的开销都是O(log(n))和skip list的开销一致,redis的skip list实现用的是双向链表,这样就可以逆序从尾部读取元素。
sorted set最经常的使用方式应该是作为索引来使用。我们可以把要排序的字段作为score存储,对象的id当元素存储。
2、相关命令(基于4.0.1版本)
1)zadd命令:添加元素,支持添加多个元素。如果元素存在,则修改score值。
2)zincrby命令:给一个元素的score加上一个值(可以是负数/浮点数)
【注意】zincrby允许加负数或浮点数。因为score是double类型。
3)zrem命令:删除元素,支持删除多个。
4)zrank命令:获取元素在有序集合中的排名,根据score从小到大的排名,下标从0开始。
5)zrevrank命令:同zrank,只是score的排序是从大到小:
6)zrange命令:获取指定区间(下标的区间)的元素,下标可以是负数。score是从小到大排序。
7)zrevrange命令:同zrange命令,只是score的排序是从大到小
8)zrangebyscore命令:获取score的值在某个区间的元素
9)zcount命令:获取score值在某个区间的元素的数量。
10)zcard命令:获取集合的元素的总数
11)zscore命令:获取元素的score值。
12)zremrangebyrank命令:删除排名在某个区间的元素:
13)zremrangebyscore命令:删除score值在某个区间的元素:
3、小结
1)zadd命令如果元素是已经存在的,会更新score值。
2)zrange、zrevrange的排名,最左边的下标值是0,最右边的下标值是-1
3)zremrangebyrank或zremrangebyscore是可以删减元素,用于排行榜之类的特别适用,维护一个数量固定的有序集合。
4)有序集合的元素个数还是不要存储太多,否则性能不好。
redis的sorted set类型的更多相关文章
- redis的Sorted Set类型!!!!
一.概述: Sorted Set(有序集合)和Set类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中.它们之间的主要差别是Sorted Set中的每一个成员都会有一个分数(sc ...
- redis数据类型:sorted sets类型及操作
sorted sets类型及操作: sorted set是set的一个升级版本,它是在set的基础上增加了一个顺序 属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会 自动重新按新的值 ...
- redis数据类型(六)Sorted set类型
一.sorted set类型 sorted set是有序集合,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,会自动重新按新的值调整顺序.可以理解了有两列的 m ...
- 尚硅谷redis学习4-数据类型
redis的数据类型包括String,Hash(类似于JAVA里的map),List,Set,Zset(sorted Set) String(字符串) string是redis最基本的类型,你可以理解 ...
- redis数据类型-散列类型
Redis数据类型 散列类型 Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他 ...
- 7、Redis中对ZSet类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ---------- ...
- 6、Redis中对Hash类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...
- 5、Redis中对Set类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...
- 4、Redis中对List类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...
随机推荐
- 走进Spark生态圈:环境的安装与配置
什么是Spark? Apache Spark 是一种大规模数据处理的快速通用引擎,使用基于内存的处理方式,较与MapReduce而言,解决了其shuffle多次IO操作带来的效率低问题,从而达到快速的 ...
- Thrift全面介绍
官网:http://thrift.apache.org 简介 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java ...
- RabbitMQ和SpringBoot的简单整合列子
一 思路总结 1 主要用spring-boot-starter-amqp来整合RabbitMQ和SpringBoot 2 使用spring-boot-starter-test来进行单元测试 3编写配置 ...
- linux 安装nginx 详解
1 nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境. n gcc 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没 ...
- 来手撸一个小小小小小"3D引擎"
开始的唠叨 说是3D引擎确实有点过于博眼球了,其实就是实现了一个透视投影,当然也不是那么简单的. 此篇文章是纯粹给小白看的 高手请勿喷 .也称之为小向带你图形学入门基础 . 哇哈哈哈哈 一说到做一个3 ...
- Grafana+Prometheus系统监控之SpringBoot
前言 前一段时间使用SpringBoot创建了一个webhook项目,由于近期项目中也使用了不少SpringBoot相关的项目,趁着周末,配置一下使用prometheus监控微服务Springboot ...
- System.UnauthorizedAccessException 错误
给目录添加 "Authenticated Users" 这个用户的 读写权限
- php垃圾回收
php所有的变量都存在一个zval的结构里面,通过refcount和is_ref来存储变量的引用关系.refcount是变量的引用次数,is_ref是变量是否被引用,当is_ref=0的时候refco ...
- [epub] epub.js的ePubReader函数报URI malformed错误的解决办法
报错信息:URI malformed 今天遇到了一个奇怪的问题折腾三个小时,最后发现是作者在底层使用了decodeURIComponent进行URL解码,而我在应用层使用了escape/unescap ...
- VC++下编译 程序“减肥”
在vc6 和 vs 2008下 编译 以下代码,不更改任何编译设置(vc6 40k , s2008 7k). 一.vc6下,Release 模式 编译处理. 1.去掉不必要的 链接库 工程(Pro ...