All files / src/resp/command/key randomkey-command.ts

61.53% Statements 8/13
100% Branches 0/0
50% Functions 1/2
61.53% Lines 8/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 381x         1x 1x                     1x 4x   4x   4x   4x                          
import { Logger } from "../../../logger";
import { IRequest } from "../../../server/request";
import { DataType } from "../../data/data-type";
import { Database } from "../../data/database";
import { DatabaseValue } from "../../data/database-value";
import { RedisToken } from "../../protocol/redis-token";
import { IRespCommand } from "../resp-command";
 
/**
 * ### Available since 1.0.0.
 * ### RANDOMKEY
 *
 * Return a random key from the currently selected database.
 *
 * ### Return value
 * Bulk string reply: the random key, or nil when the database is empty.
 */
export class RandomKeyCommand extends IRespCommand {
  public maxParams = 0
 
  public minParams = 0
 
  public name = "randomkey"
 
  private logger: Logger = new Logger(module.id);
 
  public execSync(request: IRequest, db: Database): RedisToken {
      this.logger.debug(
          `${request.getCommand()}.execute(%s)`,
          ...request.getParams()
      );
      this.logger.debug(`There are ${db.keys().length} keys in the database`);
      const randomNumber: number = Math.floor(Math.random() * db.keys().length);
      this.logger.debug(`Selected random number ${randomNumber}: ${db.keys()[randomNumber]}`);
      return RedisToken.string(db.keys()[randomNumber]);
  }
}