1.软文推荐

2.软文推荐

3.软文推荐

目录: 1、redis 中sort实现原理 2、热搜排序实现——Redis有序集合zset 3、Redis | 第9章 Lua 脚本与排序《Redis设计与实现》 4、Java项目中有按时间排序(可正序,可倒叙),热度排序(可正序,可倒叙)该怎么做? 5、关于redis中的zset(sorted set) redis 中sort实现原理

redis客户端发送sort 操作时调用函数为sortCommand,sortCommand函数对参数进行解析,之后调用pqsort函数,pqsort函数在pqsort.c文件中,此文件提供给外部只有一个函数qsort(),内部调用_pqsort()实现的,文件中一些其他的静态函数和宏也是辅助作用的。

void pqsort(void *a, size_t n, size_t es,    int (*cmp) (const void *, const void *), size_t lrange, size_t rrange)

参数a:待排序数组的首地址。n:待排序元素的个数 。es:element size 每个元素的字节大小 。cmp:回调函数,定义了比较的规则 。lrange:待排序的左边界。rrange:待排序的右边界。

内部调用 _pqsort,二者差别是psort()的参数中左右边界值含义是下标;_pqsort()参数中的左右边界值,其含义是指针。

    该宏的目的在于给swaptype赋值,swaptype = 2,数组a中元素的大小不是sizeof(long)的倍数;swaptype = 0 ,每个元素大小是sizeof(long);swaptype=1,是sizeof(long)的倍数但是不等于sizeof(long)。

    根据回调函数cmp指定的比较规则,求出变量a,b,c中处于中间大小的变量,也就是求出中位数。

排序的元素个数小于7的时候,采用了冒泡排序。

pm指向数组中间位置索引,pl指向数组首位置索引,pn执向数组末位置索引,然后求出三个数中的中位数。

元素个数大于40的时候,将元素分为8个子区间,pl左边三个区间首部中的中位数索引,pm中间三个区间首部中的中位数索引。pr右边三个区间首部中的中位数索引。

pm理解为快排中所选择的基准(key),每次排序后保证基准左边小于它,基准右边大于它,并且左右区间长度大致相同,接下来排序效率就会更高。

把基准(key)放在第一元素中,从前面位置(pa,pb)开始向后遍历,找到比基准的的数字,从后向前找到比基准小的数字,然后交换。

新排序开始使用循环(goto loop),而不是使用递归,文中给出的注释是节省栈空间。热搜排序实现——Redis有序集合zset

这里主要涉及存储和查询方案。不涉及前端搜索的分词解析。完整方案,需要包括前端分词,排除停止词,挖掘相关的词后再进行热搜词的入库和搜索。

Redis Zincrby 命令对有序集合中指定成员的分数加上增量 increment

当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。

如:对key为2019-11-25,成员为keywords,增加5分

Redis Zrange 返回有序集中,结果由小到大;Zrevrange 命令返回结果由大到小。

如:查出key为2019-11-25,top3的成员

利用有序集合zset的特性,即可达到按权重排序的效果。

Java实现:

Redis | 第9章 Lua 脚本与排序《Redis设计与实现》

参考资料 :《Redis设计与实现 第二版》;

第三部分为独立功能的实现,主要由以下模块组成: 发布订阅 、 事务 、 Lua 脚本 、 排序 、 二进制位数组 、 慢查询日志 、 监视器 ;

本篇将介绍 Redis 的 Lua 脚本 与 排序 。Redis 从 2.6 版本开始可以使用一些命令操作 Lua 脚本,引入相关支持;Redis 的 SORT 命令可以对列表键、集合键或者有序集合键的值进行排序,SORT 命令的一些可选性能让我们得到想要的排序;

与本章相关的 Redis 命令总结在下篇文章,欢迎点击收藏,本篇将不再重复:

《Redis常用命令及示例总结(API)》 :

Java项目中有按时间排序(可正序,可倒叙),热度排序(可正序,可倒叙)该怎么做?

数据是存在数据库中,可以通过sql查询实现数据的排序

数据存储在redis中,通过zset实现排序

关于redis中的zset(sorted set)

zset相关的问题,算是面试中的高频问题了。那么zset到底是什么?底层的实现原理是什么?相关的使用场景有哪些?

1. zset是什么?

在redis官网( )上,我们可以看到set, sorted set。其实zset就是sorted set。为了避免sorted set简写sset导致命令冲突,所以改为zset。同理例如class--clazz

        sorted set从字面意思上,很容易就可以理解,是个有序且不可重复的数据集合。类似set和hash的混合体,但是相比于set,zset内部由score进行排序.

2. zset中的score排序规则 

升序排列,分值越大越靠后

分值相同,则按照value的字典顺序排序      

3. zset的用法

zset的命令可在这里( )看到,有兴趣的同学可以直接去看。

ZADD key score1 value1 score2 value2........

即表示增加是的score和value 组,可同时增加多个

 4. zset实现

在redis.conf中,有如下两个参数:

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

这两个条件均不满足,使用ziplist压缩表来实现sorted set

满足这两个条件之一,sorted set的内部实现会由ziplist转换为zset

zset-max-ziplist-entries 128,即sorted set中的元素对超过128时(存储的是score和value的元素对,所以数据项是256),内部实现会由ziplist转换为zset。

zset-max-ziplist-value 64,即任意一个value的长度超过了64字节,内部实现会由ziplist转换为zset.

zset由dict、skiplist实现。

5. ziplist,即压缩列表

压缩列表是由连续性内存组成的顺序性数据结构,一个压缩列表可以包含任意多的entry,每个entry可以保存一个字节数组或者一个整数。

压缩列表在表头有三个字段:zlbytes,zltail,zllen分别表示列表长度(整个列表占用的字节数),列表尾的偏移量(尾节点距离起始地址的字节数)和列表中entry的个数。

列表表尾还有一个zlend,表示列表结束了。

6.skiplist

由上图压缩列表可知,如果我们查找第一个元素或者最后一个元素,直接通过表头三个字段的长度可定位。复杂度是O(1),而如果查找其他元素,只能顺序查找,复杂度是O(n)。 为了解决这个问题,可以使用跳表。

在新增节点之前,也会先经过查询,确定插入位置,再完成插入操作,同时也实现了Sorted Set的排序。

跳表中新增加节点不会影响其他节点的索引位置。因此插入操作只需要修改插入节点前后的指针,不需要修改所有节点,降低了插入的复杂度,所以跳表在插入性能上明显优于平衡树。

 7. zset的使用场景

需要排序的场景,比如top10的热点文章,或者排行榜

消息的延迟发送,用score存储发送时间戳,定时任务扫描sorted set,判断时间进行发送。

相关文章 8

1

opencart独立站 3分钟前

目录:1、我想建个外贸网站(opencart),求资深建站细教2、什么是独立站?独立站怎么建站?3、代问下外贸是做什么的?大家觉得做独立站...

2

vps虚拟主机租用怎么选择配置 4分钟前

目录:1、挑选VPS的几个考虑2、如何选择VPS主机3、VPS怎么选择挑选VPS的几个考虑 VPS(Virtual Private Server 虚拟专用服务器)技术,将一台服务...

3

租用香港云服务器时需要注意哪些因素 6分钟前

目录:1、选择香港服务器时你应该注意些什么2、云服务器云主机香港云服务器租用注意要素有哪些3、选择香港服务器需要注意什么?4、香...

4

新加坡直连vps怎么租用 9分钟前

目录:1、最新教程VPS怎么使用使用2、什么是VPS,请问具体怎么使用?拜托各位了 3Q3、vps主机怎么用4、vps服务器怎么使用?5、超级VPS远程桌...

5

苹果手机怎么设置阿里云邮箱 11分钟前

目录:1、苹果手机邮箱添加阿里云邮箱的设置步骤2、如何在iphone6plus上装阿里云邮箱设置3、阿里云邮箱在iPhone上怎么设置?4、手机阿里巴...

6

香港服务器为什么不能远程连接 14分钟前

目录:1、服务器无法远程怎么办?原因是什么?2、内地服务器远程连香港服务器不通3、服务器无法远程连接原因分析服务器无法远程怎么...

7

美国服务器和韩国服务器的区别有哪些 16分钟前

目录:1、韩国高防服务器和美国高防服务器有啥区别呢?2、韩国服务器为什么是海外最好的服务器,有什么优势3、韩国服务器与美国服务...

8

腾讯云服务器上传网站数据 18分钟前

目录:...