Performance 2种使用Redis跟踪在线用户的方法。哪一个更快?

Performance 2种使用Redis跟踪在线用户的方法。哪一个更快?,performance,comparison,redis,Performance,Comparison,Redis,最近我发现了一篇很好的博客文章,介绍了在Redis帮助下跟踪网站在线用户的两种方法 1) 智能钥匙及其过期设置 2) 集-s与相交 你能判断哪种方法应该更快,为什么更快吗?要知道某个特定用户是否在线,第一种方法会快得多——没有什么比读取一个键更快的了 在特定页面上查找用户并不清楚(我没有看到关于交叉键或通配符键性能的硬数字),但是如果集合太大,以至于在任何一个实现中都会导致性能问题,那么无论如何,显示它们都是不实际的 对于将用户匹配到朋友列表,我可能也会使用第一种方法-即使是几百次get操作

最近我发现了一篇很好的博客文章,介绍了在Redis帮助下跟踪网站在线用户的两种方法

1) 智能钥匙及其过期设置

2) 集-s与相交


你能判断哪种方法应该更快,为什么更快吗?

要知道某个特定用户是否在线,第一种方法会快得多——没有什么比读取一个键更快的了

在特定页面上查找用户并不清楚(我没有看到关于交叉键或通配符键性能的硬数字),但是如果集合太大,以至于在任何一个实现中都会导致性能问题,那么无论如何,显示它们都是不实际的

对于将用户匹配到朋友列表,我可能也会使用第一种方法-即使是几百次get操作(检查列表中每个人的状态),如果多个集合有大量记录且难以维护,那么在多个集合上的性能也会优于交叉


Redis集合更适合于无法使用键完成的操作,尤其是在获取集合中的所有项比检查集合中是否有特定项更重要的情况下。

除非您的Redis库是管道化的,否则几百次GET操作可能会因为网络延迟而非常缓慢。SADD和SISMEMBER都是O(1),其复杂性与SET和GET相同。因此,恕我直言,您为什么说“没有什么比读取单个键更快的了”?:-)你有数据显示SET/GET比SADD/SISMEMBER性能更好吗?我的意思是,这是出于真正的智力好奇心,没有任何发动火焰战争的意图…@Joel复杂性只是性能的一个方面,虽然两个操作可能表现出相同的复杂性,但并不一定意味着两个操作具有相同的性能。至于手头的话题,在我的笔记本电脑上,redis benchmark以48K/秒的速度进行设置操作,而SADDs为52K/秒:)@ItamarHaber足够公平了。但大O表示法是关于大问题大小n的最坏情况性能。你说得对,平均案例复杂度可能不同。您的基准测试没有显示SADD比普通集更快吗?:-)@乔:没错,O(1)!=O(1):)