Redis Sorted Sets主要根据分数排序;但是,如果多个成员共享相同的分数,则使用词典(Alpha)排序。 Redis zadd文档表明函数复杂性为:
" O(log(N))其中N是有序集合中元素的数量"
无论成员人数/长度如何,我都必须假设这仍然是正确的;但是,我有一个案例,其中只有4个分数导致成员在分数后按字典顺序排序。
我希望为每个成员添加一个时基密钥,以使次要排序基于时间,并为成员添加一些唯一性。类似的东西:
"time-based-key:member-string"
我的成员字符串可以是更大的JavaScript对象文字,如下所示:
JSON.stringify( {/* object literal */} )
排序的集合zadd和其他功能的性能是否会保持不变?
如果没有,那么性能会受到多大影响?
答案 0 :(得分:3)
复杂性来自需要测试的元素数量(与新元素进行比较)以找到正确的插入点(可能使用二进制搜索算法)。
它没有说明执行每项测试需要多长时间,因为它被认为是一个常数因素(从某种意义上说,当你添加更多项目时它并没有变化)。
在确定新元素应该在现有元素之前或之后进行比较之前需要进行比较的数据量将影响总时钟时间,但是对于每个比较都会这样做。
因此,仅在比较分数时,插入的总时钟时间将最快,并且逐渐减慢到一对字符串的深度,它必须查找以确定其词法顺序。但是,这不会是任何特定的幅度,只是具体的微秒乘以log(n)复杂度因子。