需求背景大致就是需要从一堆数据中随机取出一定数量的值。 目前做了两种测试: 1.将 N 个数据打乱后 lpush 进 redis,之后循环 lpop 。 2.N 个数据 sadd 进 redis,然后 spop 出 N 个值。
写了一个测试方法,发现这两种的性能差距巨大,数据量几千上万的时候这很正常。 但是哪怕只取一个值,lpop 也需要 60ms,spop 只需要 4ms 。差别也很大。 所以这背后的性能差距在什么地方?
后来我还试了 lindex 和 srandmember,也差不多要这么多时间。
请各位大佬指教
int batchSize = 1;
long startTime = System.currentTimeMillis();
for (int i = 0; i < batchSize; i++) {
redisService.lpop(key);
}
System.out.println(System.currentTimeMillis() - startTime);
long startTime2 = System.currentTimeMillis();
redisService.spop(setKey,batchSize);
System.out.println(System.currentTimeMillis() - startTime2);
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.