# key

说明

本节示例中的 Key 为 Tedis 实例对象,演示部分省略了外部的 async 函数层

# del

用于删除已存在的键。不存在的 key 会被忽略。

# Redis + (opens new window)

  • 可用版本:>= 1.0.0
  • 算法复杂度:O(N)
  • 返回值:被删除键的数量
  • 指令案例:
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> DEL key1 key2 key3
(integer) 2

# Tedis

  • 接口:
del(key: string, ...keys: string[]): Promise<number>;
  • 示例:
await Key.del("key1", "key2", "key3");
// 2

# exists

命令用于检查给定 key 是否存在。

# Redis + (opens new window)

  • 可用版本:>= 1.0.0
  • 算法复杂度:O(1)
  • 返回值:若 key 存在返回1,否则返回0
  • 指令案例:
redis> SET key1 "Hello"
"OK"
redis> EXISTS key1
(integer) 1
redis> EXISTS nosuchkey
(integer) 0
redis> SET key2 "World"
"OK"
redis> EXISTS key1 key2 nosuchkey
(integer) 2

# Tedis

  • 接口:
exists(key: string, ...keys: string[]): Promise<number>;
  • 示例:
await Key.exists("key1");
// 1
await Key.exists("nosuchkey");
// 0
await Key.exists("key1", "key2", "nosuchkey");
// 2

# expire

用于设置 key 的过期时间,以秒为单位。key 过期后将不再可用。

# Redis + (opens new window)

  • 可用版本:>= 1.0.0
  • 算法复杂度:O(1)
  • 返回值:设置成功返回1。 当 key 不存在或者不能为 key 设置过期时间时返回0
  • 指令案例:
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1

# Tedis

  • 接口:
expire(key: string, seconds: number): Promise<number>;
  • 示例:
await Key.expire("mykey", 10);
// 1

# expireat

以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用。

# Redis + (opens new window)

  • 可用版本:>= 1.0.0
  • 算法复杂度:O(1)
  • 返回值:设置成功返回1。 当 key 不存在或者不能为 key 设置过期时间时返回0
  • 指令案例:
redis> SET mykey "Hello"
"OK"
redis> EXPIREAT mykey 1293840000
(integer) 1

# Tedis

  • 接口:
expireat(key: string, timestamp: number): Promise<number>;
  • 示例:
await Key.expireat("mykey", 1293840000);
// 1

# keys

查找所有符合给定模式 pattern(正则表达式)的 key 。

# Redis + (opens new window)

  • 可用版本:>= 1.0.0
  • 算法复杂度:O(N)
  • 返回值:所有符合条件的 key。
  • 指令案例:
redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "firstname"
2) "lastname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "firstname"
2) "lastname"
3) "age"

# Tedis

  • 接口:
keys(pattern: string): Promise<string[]>;
  • 示例:
await Key.keys("*name*");
// ["firstname", "lastname"];
await Key.keys("a??");
// ["age"];
await Key.keys("*");
// ["firstname", "lastname", "age"];

# move

将当前数据库的 key 移动到给定的数据库 db 当中。

# Redis + (opens new window)

  • 可用版本:>= 1.0.0
  • 算法复杂度:O(1)
  • 返回值:移动成功返回1,失败则返回0
  • 指令案例:
redis> SELECT 0
"OK"
redis> SET mykey "secret base - Zone"
"OK"
redis> MOVE mykey 1
(integer) 1

# Tedis

  • 接口:
move(key: string, db: number): Promise<number>;
  • 示例:
Key.move("mykey", 1);
// 1

# persist

移除给定 key 的生存时间。

# Redis + (opens new window)

  • 可用版本:>= 2.2.0
  • 算法复杂度:O(1)
  • 返回值:当生存时间移除成功时,返回 1 ,如果 key 不存在或 key 没有设置生存时间,返回 0 。
  • 指令案例:
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> PERSIST mykey
(integer) 1
redis> TTL mykey
(integer) -1

# Tedis

  • 接口:
persist(key: string): Promise<number>;
  • 示例:
await Key.persist("mykey");
// 1

# pexpire

这个命令和 EXPIRE 命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE 命令那样,以秒为单位。

# Redis + (opens new window)

  • 可用版本:>= 2.6.0
  • 算法复杂度:O(1)
  • 返回值:设置成功,返回 1,key 不存在或设置失败,返回 0
  • 指令案例:
redis> SET mykey "Hello"
"OK"
redis> PEXPIRE mykey 1500
(integer) 1
redis> TTL mykey
(integer) 1
redis> PTTL mykey
(integer) 1499

# Tedis

  • 接口:
pexpire(key: string, milliseconds: number): Promise<number>;
  • 示例:
await Key.pexpire("mykey", 1500);
// 1

# pexpireat

PEXPIREAT 这个命令和 EXPIREAT 命令类似,但它以毫秒为单位设置 key 的过期 unix 时间戳,而不是像 EXPIREAT 那样,以秒为单位。

# Redis + (opens new window)

  • 可用版本:>= 2.6.0
  • 算法复杂度:O(1)
  • 返回值:设置成功,返回 1,key 不存在或设置失败,返回 0
  • 指令案例:
redis> SET mykey "Hello"
"OK"
redis> PEXPIREAT mykey 1555555555005
(integer) 1
redis> TTL mykey
(integer) 21889460
redis> PTTL mykey
(integer) 21889460097

# Tedis

  • 接口:
pexpireat(key: string, millisecondsTimestamp: number): Promise<number>;
  • 示例:
await Key.pexpireat("mykey", 1555555555005);
// 1

# pttl

以毫秒为单位返回 key 的剩余生存时间。在 Redis 2.6 和之前版本,如果 key 不存在或者 key 存在且无过期时间将返回-1。从 Redis 2.8 开始,错误返回值发送了如下变化:

  • 如果 key 不存在返回-2
  • 如果 key 存在且无过期时间返回-1

# Redis + (opens new window)

  • 可用版本:>= 2.6.0
  • 算法复杂度:O(1)
  • 返回值: key 有效的毫秒数(TTL in milliseconds),或者一个负值的错误 (参考上文)
  • 指令案例:
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 1
(integer) 1
redis> PTTL mykey
(integer) 999

# Tedis

  • 接口:
pttl(key: string): Promise<number>;
  • 示例:
await Key.pttl("mykey");
// 999

# randomkey

从当前数据库返回一个随机的 key。

# Redis + (opens new window)

  • 可用版本:>= 1.0.0
  • 算法复杂度:O(1)
  • 返回值:如果数据库没有任何 key,返回 nil,否则返回一个随机的 key。
  • 指令案例:
redis> MSET fruit "apple" drink "beer" food "cookies"
"OK"
redis> RANDOMKEY
"fruit"

# Tedis

  • 接口:
randomkey(): Promise<null | string>;
  • 示例:
await Key.randomkey();
// fruit

# rename

将 key 重命名为 newkey,当 key 不存在时返回一个错误,如果 newkey 已经存在,则值将被覆盖。在 Redis >= 3.2.0 之前,key 与 newkey 相同的情况下将返回一个错误。

# Redis + (opens new window)

  • 可用版本:>= 1.0.0
  • 算法复杂度:O(1)
  • 返回值:如果设置成功返回"OK"
  • 指令案例:
redis> SET mykey "Hello"
"OK"
redis> RENAME mykey myotherkey
"OK"
redis> GET myotherkey
"Hello"

# Tedis

  • 接口:
rename(key: string, newKey: string): Promise<any>;
  • 示例:
await Key.rename("mykey", "myotherkey");
// "OK"

# renamenx

当且仅当 newkey 不存在时,将 key 改名为 newkey 。当 key 不存在时,返回一个错误。

# Redis + (opens new window)

  • 可用版本:>= 1.0.0
  • 算法复杂度:O(1)
  • 返回值:修改成功时,返回 1 ,如果 newkey 已经存在,返回 0 。
  • 指令案例:
redis> SET mykey "Hello"
"OK"
redis> SET myotherkey "World"
"OK"
redis> RENAMENX mykey myotherkey
(integer) 0
redis> GET myotherkey
"World"

# Tedis

  • 接口:
renamenx(key: string, newKey: string): Promise<0 | 1>;
  • 示例:
await Key.renamenx("mykey", "myotherkey");
// 0

# ttl

返回 key 剩余的过期时间。 这种反射能力允许 Redis 客户端检查指定 key 在数据集里面剩余的有效期。在 Redis 2.6 和之前版本,如果 key 不存在或者已过期时返回-1。从 Redis2.8 开始,错误返回值的结果有如下改变:

  • 如果 key 不存在或者已过期,返回 -2
  • 如果 key 存在并且没有设置过期时间(永久有效),返回 -1 。

# Redis + (opens new window)

  • 可用版本:>= 1.0.0
  • 算法复杂度:O(1)
  • 返回值: key 有效的秒数(TTL in seconds),或者一个负值的错误 (参考上文)
  • 指令案例:
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10

# Tedis

  • 接口:
ttl(key: string): Promise<number>;
  • 示例:
await Key.ttl("mykey");
// 10

# type

返回 key 所存储的 value 的数据结构类型,它可以返回 string, list, set, zset 和 hash 等不同的类型。

# Redis + (opens new window)

  • 可用版本:>= 1.0.0
  • 算法复杂度:O(1)
  • 返回值:返回当前 key 的数据类型,如果 key 不存在时返回 none。
  • 指令案例:
redis> SET key1 "value"
"OK"
redis> LPUSH key2 "value"
(integer) 1
redis> SADD key3 "value"
(integer) 1
redis> TYPE key1
"string"
redis> TYPE key2
"list"
redis> TYPE key3
"set"

# Tedis

  • 接口:
type(key: string): Promise<string>;
  • 示例:
await Key.type("key1");
// string
await Key.type("key2");
// list
await Key.type("key3");
// set