use*_*119 0 sorting redis node-redis
Redis Sorted Sets 主要基于 Score 进行排序;但是,在多个成员共享相同 Score 词典(Alpha)排序的情况下。在Redis的zadd文件表示该功能的复杂性:
"O(log(N)) 其中 N 是排序集中的元素数"
无论成员大小/长度如何,我都必须假设这仍然是正确的;但是,我有一个案例,只有 4 个分数导致成员在 Score 之后按字典顺序排序。
我想为每个成员添加一个时基键,以使二级排序基于时间,并为成员添加一些唯一性。就像是:
"time-based-key:member-string"
Run Code Online (Sandbox Code Playgroud)
我的成员字符串可以是更大的 JavaScript 对象文字,如下所示:
JSON.stringify( {/* object literal */} )
Run Code Online (Sandbox Code Playgroud)
排序集 zadd 和其他功能的性能会保持不变吗?
如果没有,性能会受到多大程度的影响?
复杂性来自需要测试的元素数量(与新元素相比)以找到正确的插入点(大概使用二进制搜索算法)。
它没有说明执行每个测试需要多长时间,因为这被认为是一个恒定因素(从某种意义上说,当您添加更多项目时它不会改变)。
在确定新元素应该在现有元素之前还是之后需要比较的数据量将影响总时钟时间,但它对每次比较都会产生同样的影响。
因此,当仅比较分数时,插入的整体时钟时间将是最快的,并且在确定它们的词汇顺序时必须查看更深的一对字符串,并且逐渐变慢。不过,这不会是任何特定的量级,只是要乘以 log(n) 复杂性因子的具体微秒数。