我的代码需要经常从有序的Redis集合中获得最高分数的成员。Redis:它是否仍然O(logN)从排序集中获得最高分?
zrangebyscore的时间复杂度为O(logN):http://redis.io/commands/zrangebyscore。 由于我只想获得最高分,因此Redis会优化它以返回O(1)次的最高分数成员吗?
我的代码需要经常从有序的Redis集合中获得最高分数的成员。Redis:它是否仍然O(logN)从排序集中获得最高分?
zrangebyscore的时间复杂度为O(logN):http://redis.io/commands/zrangebyscore。 由于我只想获得最高分,因此Redis会优化它以返回O(1)次的最高分数成员吗?
Redis文档没有描述这样的优化。
时间复杂度:您链接到的
ZRANGEBYSCORE
状态(加重语气)页面 有序集合O(日志(N)+ M),N为元素的数量和M的数元素正在返回。 如果M是 常数(例如总是询问具有LIMIT的前10个元素),则可以将其认为是O(log(N)) 。
鉴于此,看起来时间复杂性不会是O(1),除非您的排序集只包含一个元素。相反,时间复杂度将取决于排序集中元素的数量,并且仍然是O(log(N))。
如果您试图获得最高得分以至于ZRANGE的复杂性成为问题,请缓存独立于排序集合的最高分数,然后您可以通过O(1)得到它。
这是一个不错的简单解决方案。 – 2014-09-18 20:08:35
“ZRANGEBYSCORE”实现的完整代码可以在这里找到(https://github.com/antirez/redis/blob/209f266cc534471daa03501b2802f08e4fca4fe6/src/t_zset.c#L2202)。 – 2014-09-18 18:41:19