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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | 1x 1x 1x 1x 4x 4x 4x 4x 2x 2x 2x 2x 2x 2x 2x 2x | import { Logger } from "../../../logger"; import { IRequest } from "../../../server/request"; import { Database } from "../../data/database"; import { RedisToken } from "../../protocol/redis-token"; import { IRespCommand } from "../resp-command"; /** * ### Available since 1.0.0. * ### SELECT index * Out of the box, every Redis instance supports 16 databases. * The database index is the number you see at the end of a Redis * URL: redis://localhost:6379/0 . The default database is 0 but you can change * that to any number from 0-15 * * Select the Redis logical database having the specified zero-based numeric index. * New connections always use the database 0. * * Selectable Redis databases are a form of namespacing: all databases are still * persisted in the same RDB / AOF file. However different databases can have keys * with the same name, and commands like {@link resp/command/db/flushdb-command.FlushDbCommand | FLUSHDB}, * See: SWAPDB - (not implemented) or {@link resp/command/key/randomkey-command.RandomKeyCommand | RANDOMKEY} work on specific * databases. * * In practical terms, Redis databases should be used to separate different keys * belonging to the same application (if needed), and not to use a single Redis * instance for multiple unrelated applications. * * When using Redis Cluster, the {@link resp/command/db/select-command.SelectCommand | SELECT} command cannot be used, since Redis Cluster * only supports database zero. In the case of a Redis Cluster, having multiple * databases would be useless and an unnecessary source of complexity. Commands * operating atomically on a single database would not be possible with the Redis * Cluster design and goals. * * Since the currently selected database is a property of the connection, clients * should track the currently selected database and re-select it on reconnection. * While there is no command in order to query the selected database in the current * connection, the {@link resp/command/client-command.ClientCommand | CLIENT LIST} output shows, for each client, the currently selected * database. * * Return value * Simple string reply */ export class SelectCommand extends IRespCommand { public maxParams = 1 public minParams = 1 public name = "select" private logger: Logger = new Logger(module.id); public execSync(request: IRequest, db: Database): RedisToken { this.logger.debug( `${request.getCommand()}.execute(%s)`, ...request.getParams() ); const id: any = Number(request.getParam(0)); this.logger.debug(`DB Index is ${id}`); Iif (isNaN(id)) { return RedisToken.error("ERR invalid DB index"); } Eif (id > -1) { Eif (id < 16) { request.getSession().setCurrentDb(id); } else { return RedisToken.error("ERR DB index is out of range"); } } else { return RedisToken.error("ERR DB index is out of range"); } return RedisToken.responseOk(); } } |