在Redis上执行srandmember [key] 5是否需要5次以上的单独查询?

问题描述:

在的情况下的Redis SRANDMEMBER上的一组被称为潜在多次(在运行时未知的),它降低Redis的服务器上的负载使用在Redis上执行srandmember [key] 5是否需要5次以上的单独查询?

SRANDMEMBER [key] count

,而不是运行

SRANDMEMBER [key] 1,计数次数?

例如,当我们知道永远不会有超过5个随机成员需要时,运行它为srandmember [key] 5

这取决于很多事情......

首先,让我们称之为SRANDMEMBER [key] 1SRANDMEMBER,而呼叫SRANDMEMBER [key] countbatch SRANDMEMBER。另外SRANDMEMBER [key] 1等于SRANDMEMBER [key]

你想要多少个随机成员?

如果您需要太多的随机成员,即一个非常大的count,然后batch SRANDMEMBER可能会阻塞很长一段时间的服务器,因为Redis的是单线程。这增加了Redis的负载。

相反,如果count很小,例如,小于10batch SRANDMEMBER应该非常有效,并且不会增加任何重要负载。

网络延迟

相比多次调用SRANDMEMBER(多个 'RTT'),batch SRANDMEMBER可以减少网络等待时间,即,仅费一RTT

唯一的随机成员

多次调用到SRANDMEMBER,你可能会得到同样的成员多次。

如果你想要独特的随机成员,你必须使用batch SRANDMEMBER。如果count是肯定的,则Redis保证返回的成员是唯一的。当然,如果count大于SET的大小,返回成员的数量可能会小于count

如果您的系统允许使用重复的随机成员,则可以使用多次调用SRANDMEMBER,或使用batch SRANDMEMBER的一次调用,使用负数count