Vad sägs om att använda bitmappar för att spela in, för alla möjliga nbr , om det värdet används eller inte?
För att registrera att ett värde har tagits använd SETBIT :
SETBIT key [nbr] 1
För att hitta en gratis nbr använd BITPOS :
BITPOS key 0
För att undvika tävlingsförhållanden bör du se till att din get-and-set är atomär. [OP tar upp detta i en följdfråga.]
Detta kommer att kräva mycket lite minne (8K byte för 65536 möjliga värden). BITPOS är O(n), men det är osannolikt att det är ett verkligt problem.