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类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...
随机推荐
- 主机和VMware中的Linux如实现共享文件夹
当我在网上查了几小时的挂载文件夹方法后发现,VMware中的Linux的挂载和双系统的挂载不同 最终目的就是在/mnt目录下有个hgfs的文件夹 效果图: 首先打开VMware中的Linux系统 具体 ...
- Git命令补全配置
Git命令补全功能 1.下载下面的文件 https://github.com/sguo421/code/blob/master/git-completion.bash 2.放倒HOME目录下,设置为隐 ...
- JavaScript的兼容
兼容总结 如果两个都是属性,用逻辑 || 做兼容 如果有一个是方法,用三元做兼容 如果多个属性或方法,封装函数做兼容 获取class属性值的兼容 function getClass (obj){ if ...
- SpringMVC 快速入门
SpringMVC 快速入门 SpringMVC 简介 SpringMVC是 Spring为展示层提供的基于Web MVC设计模式的请求驱动类型的轻量级Web框架,它的功能和Struts2一样.但比S ...
- 程序员的自我救赎---1.4.2: 核心框架讲解(BLL&Tool)
<前言> <目录> (一) Winner2.0 框架基础分析 (二) 短信中心 (三)SSO单点登录 (四)PLSQL报表系统 (五)钱包系统 (六)GPU支付中心 (七)权限 ...
- Python简单爬虫
爬虫简介 自动抓取互联网信息的程序 从一个词条的URL访问到所有相关词条的URL,并提取出有价值的数据 价值:互联网的数据为我所用 简单爬虫架构 实现爬虫,需要从以下几个方面考虑 爬虫调度端:启动爬虫 ...
- Akka(40): Http:Marshalling reviewed - 传输数据序列化重温
上篇我们讨论了Akka-http的文件交换.由于文件内容编码和传输线上数据表达型式皆为bytes,所以可以直接把文件内容存进HttpEntity中进行传递.那么对于在内存里自定义的高级数据类型则应该需 ...
- 第六届河南省赛 River Crossing 简单DP
1488: River Crossing Time Limit: 1 Sec Memory Limit: 128 MB Submit: 83 Solved: 42 SubmitStatusWeb ...
- memcache调整value大小限制
> *事件背景: 当Redis有问题时按预案就会切换到本机memcache,但是我们首页 key:value现 在是1.5M同时memcache item限制是1M,导致首页写入memcache ...
- php结合redis实现秒杀功能
<?php 第一种,简单实现 $conn=mysql_connect("localhost","big","123456"); if( ...