哈希表

interface HashClient {
    hdel: ((key, ...fields) => number);
    hexists: ((key, field) => number);
    hget: ((key, field) => string);
    hgetAll: ((key) => "redis".StringDict);
    hincrby: ((key, field, increment) => number);
    hkeys: ((key) => string[]);
    hlen: ((key) => number);
    hmget: ((key, ...fields) => string[]);
    hmset: ((key, map) => string);
    hscan: ((key, cursor, opt?) => HScanResult);
    hset: ((key, field, value) => number);
    hsetnx: ((key, field, value) => number);
    hstrlen: ((key, field) => number);
    hvals: ((key) => string[]);
}

Hierarchy (view full)

Properties

hdel: ((key, ...fields) => number)

删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略

Type declaration

    • (key, ...fields): number
    • Parameters

      • key: string

        哈希表

      • Rest ...fields: string[]

        域列表

      Returns number

Returns

被成功移除的域的数量,不包括被忽略的域

hexists: ((key, field) => number)

检查给定域 field 是否存在于哈希表 hash 当中

Type declaration

    • (key, field): number
    • Parameters

      • key: string

        哈希表

      • field: string

      Returns number

Returns

给定域存在时返回 1 , 在给定域不存在时返回 0

hget: ((key, field) => string)

返回哈希表中给定域的值。

Type declaration

    • (key, field): string
    • Parameters

      • key: string

        哈希表

      • field: string

      Returns string

Returns

如果存在则返回值,不存在则返回空字符串

hgetAll: ((key) => "redis".StringDict)

返回哈希表 key 中,所有的域和值。

Type declaration

Returns

键值对

hincrby: ((key, field, increment) => number)

为哈希表 key 中的域 field 的值加上增量 increment

Type declaration

    • (key, field, increment): number
    • Parameters

      • key: string

        哈希表, 如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令

      • field: string

        域,如果域 field 不存在,那么在执行命令前,域的值被初始化为 0。 如果存在且值是字符串的, 则抛异常

      • increment: number

        增量,可为负数,本操作的值被限制在 64 位(bit)有符号数字表示之内

      Returns number

Returns

执行 HINCRBY 命令之后,哈希表 key 中域 field 的值

hkeys: ((key) => string[])

返回哈希表 key 中的所有域。

Type declaration

    • (key): string[]
    • Parameters

      • key: string

        哈希表

      Returns string[]

Returns

一个包含哈希表中所有域的表。 当 key 不存在时,返回一个空表。

hlen: ((key) => number)

返回哈希表 key 中域的数量。

Type declaration

    • (key): number
    • Parameters

      • key: string

        哈希表

      Returns number

Returns

哈希表中域的数量。 当 key 不存在时,返回 0 。

hmget: ((key, ...fields) => string[])

返回哈希表 key 中,一个或多个给定域的值。

Type declaration

    • (key, ...fields): string[]
    • Parameters

      • key: string

        哈希表

      • Rest ...fields: string[]

        域列表

      Returns string[]

Returns

一个包含多个给定域的关联值的表,表值的排列顺序和给定域参数的请求顺序一样。

hmset: ((key, map) => string)

同时将多个 field-value (域-值)对设置到哈希表 key 中。 此命令会覆盖哈希表中已存在的域。

Type declaration

    • (key, map): string
    • Parameters

      • key: string

        哈希表,如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作

      • map: "redis".StringDict

        必须是<string, string>键值对

      Returns string

Returns

如果命令执行成功,返回 OK。 当 key 不是哈希表(hash)类型时,返回一个错误

hscan: ((key, cursor, opt?) => HScanResult)

哈希表的增量式迭代命令, 用于增量地迭代一个哈希表上的元素。

Type declaration

Example

import * as redis from 'redis';

let cli = redis.newClient("test");
let key = "hash_test_scan_1";

// 预置数据用于测试
// for (let i = 0; i < 2000; i++) {
// cli.hset(key, `F:${i}`, `VBCCCCC_${i}`);
// }

// console.log(cli.hmset(key, { A: "A", B: "B", C: "C2", D: "D2" }));
console.log("no option", cli.hscan(key, 0));
console.log("empty option", cli.hscan(key, 0, {}));
console.log("count 5", cli.hscan(key, 0, { match: "F:1*", count: 5 }));


// scan all
let pattern = "F:1*";
let count = 100;

console.log("scan all with iteration ", hscan(key, count, pattern));
console.log("scan all with iteration ", hscan(key, 50, pattern));

functionhscan: (key: string, count: number, pattern: string) => number {
let cursor = 0;
let iter = 1;
let m = {}
while (true) {
console.log("iteration ", iter, "cursor ", cursor);
let res = cli.hscan(key, cursor, { match: pattern, count: count });
// 仅用于检查是否会出现重复,按cursor迭代不会出现重复。
for (let k in res.hash) {
if (m[k]) {
throw new Error(`duplicated hash field ${k}`);
}
m[k] = res.hash[k];
console.log(k, " => ", res.hash[k]);
}
// 如果 cursor 为 0 代表已经遍历完了整个数据集
if (res.cursor == 0) {
// console.log("end with iteration ", iter);
console.log("all fields ", Object.keys(m).length)
return iter;
}
iter++;
cursor = res.cursor;
}
}
hset: ((key, field, value) => number)

将哈希表 hash 中域 field 的值设置为 value

Type declaration

    • (key, field, value): number
    • Parameters

      • key: string

        哈希表

      • field: string

      • value: string

        字段值, 如果值为null或者undefined,设置成空字符串

      Returns number

Returns

当 HSET 命令在哈希表中新创建 field 域并成功为它设置值时, 命令返回 1 ; 如果域 field 已经存在于哈希表, 并且 HSET 命令成功使用新值覆盖了它的旧值, 那么命令返回 0 。

hsetnx: ((key, field, value) => number)

当且仅当域 field 尚未存在于哈希表的情况下, 将它的值设置为 value

Type declaration

    • (key, field, value): number
    • Parameters

      • key: string

        哈希表

      • field: string

      • value: string

        字段值

      Returns number

Returns

HSETNX 命令在设置成功时返回 1 , 在给定域已经存在而放弃执行设置操作时返回 0

hstrlen: ((key, field) => number)

返回哈希表 key 中, 与给定域 field 相关联的值的字符串长度(string length)

Type declaration

    • (key, field): number
    • Parameters

      • key: string

        哈希表

      • field: string

      Returns number

Returns

如果给定的键或者域不存在, 那么命令返回 0

hvals: ((key) => string[])

返回哈希表 key 中所有域的值。

Type declaration

    • (key): string[]
    • Parameters

      • key: string

        哈希表

      Returns string[]

Returns

一个包含哈希表中所有值的表。 当 key 不存在时,返回一个空表。