文档章节

redis的有序集合研究

强子大叔的码田
 强子大叔的码田
发布于 01/21 19:02
字数 441
阅读 160
收藏 0

【完毕】有序集合

假设执行下面的操作

 

jedis.zadd("myzset", System.currentTimeMillis(),
                "An error is returned when key exists but does not hold a sorted set.\r\n" + "\r\n"
                        + "The score value should be the string representation of a numeric value, "
                        + "and accepts double precision floating point numbers. "
                        + "It is possible to provide a negative value to decrement the score.");

 

我们看后面会发生什么!

debug一下

image.png

 

下面让我们继续!

 

image.png

 

继续!

 

image.png

 

继续!

 

image.png

 

先查找这个key是否存在

image.png

 

对这次来说,我的这个key是新key

image.png

 

image.png

 

让我们进入zslCreate的世界!

 

image.png

 

image.png

 

image.png

 

image.png

 

好,然后让我们执行增加操作

image.png

 

dbAdd的常规操作如下

image.png

这个没啥好说的,每个数据库本质就是大的哈希表而已!

 


下面,开始处理我们自己的业务数据!

image.png

 

提示:zset内部的编码方式有2种:OBJ_ENCODING_ZIPLIST | OBJ_ENCODING_SKIPLIST

 

继续!

image.png

 

第一次增加肯定为空。。。我们继续!

image.png

 

image.png

这个细节就不深究了,有兴趣的自己研究下!

 

第一个数据就插入完毕,我们再来插入同样的字符串

image.png

 

image.png

 

image.png也就是说,判断一个元素是不是已经在集合里是通过memcmp来操作的!

 

此时,系统判断是要更新这个对象的score,那我们就接着往下走!

image.png

 

image.png

 

sdscmp还是基于memcmp

image.png

 


总结zset的实现:

1)基于内部的哈希表完成集合功能(自然也要存数据)

2)基于跳跃表实现数据的存储

3)通过跳跃表的分数实现查找的加速

4)通过memcmp函数判断2个对象是不是一样的!

 

嗯,大致了解到这里就差不多了!

 

© 著作权归作者所有

强子大叔的码田

强子大叔的码田

粉丝 923
博文 1605
码字总数 1266482
作品 9
南京
架构师
私信 提问
加载中

评论(0)

2017-05-09日志

1,上午跟钰姐一起研究质监局门户栏目列表,添加判断实现二级菜单标题处显示一级菜单名称,稍微了解freeMarker代码格式,并对逻辑有一定了解。 2,在菜鸟教程学习redis,下载redis的压缩包并...

麦兜鱼丸
2017/05/09
2
0
springboot,redis应用

1、redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。 2、这...

小不点丶
2017/10/20
0
0
Redis研究-3.7 有序集合中范围以及数学集合运算

1.安装redis-py 因为在类Unix系统上都默认安装了Python,所以,本章节主要看看,怎么样用Python来操作Redis。要让Python来操作Redis,你先要安装Python的Redis客户端redis-py库,库的github地...

会飞的杨先生
2015/11/03
126
2
Redis研究-3.6 Redis 5种类型的基本使用2

1.字符串 1.1 整数类型操作 操作: get redis_int结果: (nil) 操作: incr redis_int结果: (integer) 1 1.2 字节串 2.列表 3.集合 4.散列 5.有序集合...

会飞的杨先生
2015/11/03
221
0
Redis研究-3.6 Redis5种类型的基本使用

1.字符串 2.列表(redis中的列表是可以存储重复的元素的) 3.集合(也就是说,集合里面是不能有相同的值的,因为他用了hash算法) 4.散列(也就是映射) 5.有序集合(在Redis中,有序集合里面的...

会飞的杨先生
2015/11/02
140
0

没有更多内容

加载失败,请刷新页面

加载更多

00-Java 面试准备

面试之前 面试前准备简历需要注意的几个方面: 写简历、改简历,这个一定要干的。简历有两个作用,一个是吸引别人,能让别人邀请你去面试,这是前提;另一个是引导面试的人,让面试的人问你所...

源程序
今天
54
0
OSChina 周二乱弹 —— 大王(@罗马的王)颜值制霸Osc社区

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @巴拉迪维 :Lunik的单曲《Seeing You Soar》 I hope you’re smiling,When seeing me soar. #今日歌曲推荐# 《Seeing You Soar》- Lunik 手...

小小编辑
今天
83
0
wordcount代码

1.写出map类 public class WCMapper extends Mapper<LongWritable,Text,Text,LongWritable>{ @Override protected void map(LongWritable key,Text value,Context context)throws IOExcepti......

七宝1
今天
59
0
Spring Batch 小任务(Tasklet)步骤

Chunk-Oriented Processing不是处理 step 的唯一方法。 考虑下面的一个场景,如果你仅仅需要调用一个存储过程,你可以在 ItemReader 中实现这个调用,然后在存储过程完成调用后返回 null。这...

honeymoose
今天
67
0
Linux日志分析

1. Linux日志文件的类型 2. 系统服务日志 2.1 syslogd的简介 2.2 syslogd的配置和使用 2.3 日志的安全性设置 2.4 远程日志记录服务 3. 日志的轮替 3.1 logrotate简介 3.2 logrotate的配置 3....

JiaMing
昨天
67
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部