redis

redis

Vino Redis 模块提供了一个简单且强大的接口来管理和执行 Redis 操作。该模块适用于需要与 Redis 进行交互的各种应用场景,例如缓存管理、会话存储或任何需要持久化数据的应用。

初始化

redis模块通过一个工厂函数提供客户端实例化。

名称类型参数返回值说明
open()方法config: objectRedisClient object创建一个新的 Redis 客户端对象

打开连接

使用 open 方法初始化一个新的 Redis 客户端实例。这个实例将提供各种 Redis 命令的功能。

示例

import redis from 'redis';

let config = {
	url: "redis://user:secret@localhost:6379/0?protocol=3"
};

// 创建 Redis 客户端
let db = redis.open(config);
console.log("Redis 客户端实例已创建");

URL 格式

redis://[username]:[password]@[host]:[port]/[db-number]?param=value

参数说明

  • username: 用户名,通常用于 Redis 集群的身份验证,但大多数 Redis 实例不需要用户名,可以省略。
  • password: 连接 Redis 实例所需的密码。如果没有密码,则可以省略 password: 部分。
  • host: Redis 服务器的主机名或 IP 地址,默认是 localhost。
  • port: Redis 服务器的端口号,默认是 6379。
  • db-number: Redis 数据库编号,通常为一个整数,默认为 0。可以根据需求指定不同的数据库。
  • param: 可选参数,用于指定连接的其他配置。

常用参数

  • protocol: Redis 协议版本。例如 protocol=3,用来指定连接 Redis 时使用的协议版本。
  • timeout: 指定连接 Redis 的超时时间。例如 timeout=30s,表示 30 秒超时。
  • ssl: 使用 SSL/TLS 加密连接。通常为 true 或 false。
  • tcpKeepAlive: 用于 TCP 保持连接的时间间隔。例如 tcpKeepAlive=60s。
  • clientName: 指定客户端名称,便于在 Redis 服务器日志中识别客户端。

示例

import redis from 'redis';

let config = {
	url: "redis://chaoxing:secret@localhost:6379/0?protocol=3"
};
// 创建 Redis 客户端
let db = redis.open(config);

RedisClient 对象

RedisClient 对象提供了管理和执行 Redis 操作的方法,详细描述如下:

方法概述

名称类型参数返回值说明
doFunctioncommand: string, ...args: any[]any直接执行 Redis 命令
setFunctionkey: string, value: any, expiration?: intstring设置一个键值对,并指定过期时间
getFunctionkey: stringstring获取一个键的值
delFunctionkey: stringint删除一个或多个键
expireFunctionkey: string, seconds: intboolean设置键的过期时间
ttlFunctionkey: stringint获取键的剩余过期时间
pTtlFunctionkey: stringint获取键的剩余过期时间(毫秒)
appendFunctionkey: string, value: stringint在字符串末尾追加值
setNXFunctionkey: string, value: any, expiration?: intboolean只有在key不存在时设置一个键值对。
scanFunctionindex: int, key: string, limit: intobject模糊查询key
mSetFunctionmap: Mapstring批量设置键值对
lPushFunctionkey: string, ...value: any[]int向列表左端插入一个或多个值
rPushFunctionkey: string, ...value: any[]int向列表右端插入一个或多个值
lPopFunctionkey: stringany从列表左端弹出一个值
rPopFunctionkey: stringany从列表右端弹出一个值
lRangeFunctionkey: string, start: int, end: intstring[]获取列表指定范围的元素
sAddFunctionkey: string, ...int: any[]int向集合添加一个或多个成员
sMembersFunctionkey: stringstring[]获取集合的所有成员
sRemFunctionkey: string, ...int: any[]int从集合中移除一个或多个成员
sIsMemberFunctionkey: string, int: anyboolean判断成员是否在集合中
hSetFunctionkey: string, field: string, value: anyint设置哈希字段的值
hGetFunctionkey: string, field: stringany获取哈希字段的值
hDelFunctionkey: string, field: stringint删除哈希字段
hGetAllFunctionkey: stringobject获取哈希的所有字段和值
zAddFunctionkey: string, score: int, member: stringint向有序集合添加一个成员
zRangeFunctionkey: string, start: int, end: intstring[]获取有序集合指定范围的成员
zRemFunctionkey: string, int: stringint移除有序集合中的一个成员
zScoreFunctionkey: string, int: stringint获取有序集合中成员的分数
subscribeFunctionchannel: stringPubSub订阅频道
publishFunctionchannel: string, message: stringint发布消息到频道

do

do 方法是一个通用接口,允许用户直接执行 Redis 命令,并处理结果。它提供了灵活性,使得用户可以执行任何 Redis 命令,而不必依赖特定的客户端方法。

示例

import redis from 'redis';

let db = redis.open(config);

// 执行 Redis SET 命令
let result = db.do('SET', 'key', 'value');
console.log(result); // 输出: "OK"

// 执行 Redis GET 命令
let value = db.do('GET', 'key');
console.log(value); // 输出: "value"

// 执行 Redis DEL 命令
let delCount = db.do('DEL', 'key');
console.log(delCount); // 输出: 1

set

设置一个键值对,并指定过期时间。返回 OK 表示成功。

示例

import redis from 'redis';

let db = redis.open(config);

// 设置键值对
let result = db.set('key', 'value', 10);
console.log(result); // 输出: "OK"

// 不设置过期时间
let result1 = db.set('key1', 'value');
// 或
let result2 = db.set('key2', 'value', -1);

get

获取一个键的值。如果键不存在,则返回 null

示例

import redis from 'redis';

let db = redis.open(config);

// 获取键的值
let value = db.get('key');
console.log(value); // 输出: "value"

del

删除一个或多个键。返回删除的键数。

示例

import redis from 'redis';

let db = redis.open(config);

// 删除键
let result = db.del('key');
console.log(result); // 输出: 1

// 删除多个键
let result1 = db.del('key', "key1");
console.log(result1); // 如果两个键都存在的话输出: 2

expire

设置键的过期时间。返回 true 表示成功。

示例

import redis from 'redis';

let db = redis.open(config);

// 设置键的过期时间
let result = db.expire('key', 10);
console.log(result); // 输出: true

ttl

获取键的剩余过期时间(秒)。如果键不存在或没有设置过期时间,则返回 -1。

示例

import redis from 'redis';

let db = redis.open(config);

// 获取键的过期时间
let ttl = db.ttl('key');
console.log(ttl); // 输出: 10

pTtl

获取键的剩余过期时间(毫秒)。如果键不存在或没有设置过期时间,则返回 -1。

示例

import redis from 'redis';

let db = redis.open(config);

// 获取键的过期时间
let pttl = db.pTtl('key');
console.log(pttl); // 输出: 10000

append

在字符串末尾追加值。返回追加后字符串的长度。

示例

import redis from 'redis';

let db = redis.open(config);

// 追加值
let length = db.append('key', 'suffix');
console.log(length); // 输出: 10

setNX

只有在 key 不存在时设置 key 的值。

示例

import redis from 'redis';

let db = redis.open(config);

// 设置没有过期时间的值
let bool = db.setNX('key_lock', 'suffix');
console.log(bool); // 输出: true

// 设置有过期时间的值
let str = db.setNX('key_lock1', 'suffix', 10);
console.log(str); // 输出: true

scan

模糊查询操作

查询参数:
  • index 是开始扫描的游标位置,首次扫描传入0。
  • key "test_*" 是模式匹配字符串,*是通配符,表示匹配任何字符序列。
  • limit 是每次迭代返回的元素数量限制。
返回参数对象属性:
  • keys 是匹配到的键列表。
  • cursor 是下一次迭代的游标位置。

示例

import redis from 'redis';

let db = redis.open(config);

// 模糊查询
let scan = db.scan(0, "*ey*", 10);
console.log(scan);
// 打印:
// {
// 	keys: [ vino_key, listKey1 ],
// 	cursor: 0,
// }

mSet

批量设置键值对

示例

import redis from 'redis';

let db = redis.open(config);

// 批量设置键值对
let map = new Map();
map.set('a', 'alpha');
map.set('b', 'beta');
map.set('g', 'gamma');

let res = db.mSet(map);
console.log(res);           // 输出: OK
console.log(db.get("a"));   // 输出: "alpha"

lPush

向列表左端插入一个或多个值。返回列表的长度。

示例

import redis from 'redis';

let db = redis.open(config);

// 向列表左端插入值
let length = db.lPush('listKey', 'value1');
console.log(length); // 输出: 1

// 向列表左端插入多个值
let length = db.lPush('listKey', 'value2', 'value3');
console.log(length); // 加上上面插入的输出列表新的长度: 3

rPush

向列表右端插入一个或多个值。返回列表的长度。

示例

import redis from 'redis';

let db = redis.open(config);

// 向列表右端插入值
let length = db.rPush('listKey', 'value1');
console.log(length); // 输出: 1

lPop

从列表左端弹出一个值。返回弹出的值。

示例

import redis from 'redis';

let db = redis.open(config);

// 从列表左端弹出值
let value = db.lPop('listKey');
console.log(value); // 输出: "value1"

rPop

从列表右端弹出一个值。返回弹出的值。

示例

import redis from 'redis';

let db = redis.open(config);

// 从列表右端弹出值
let value = db.rPop('listKey');
console.log(value); // 输出: "value1"

lRange

获取列表指定范围的元素。返回元素数组。

示例

import redis from 'redis';

let db = redis.open(config);

// 获取列表元素
let values = db.lRange('listKey', 0, -1);
console.log(values); // 输出: ["value1", "value2"]

sAdd

向集合添加一个或多个成员。返回新添加成员的数量。

示例

import redis from 'redis';

let db = redis.open(config);

// 向集合添加成员
let count = db.sAdd('setKey', 'member1');
console.log(count); // 输出: 1

sMembers

获取集合的所有成员。返回成员数组。

示例

import redis from 'redis';

let db = redis.open(config);

// 获取集合成员
let members = db.sMembers('setKey');
console.log(members); // 输出: ["member1"]

sRem

从集合中移除一个或多个成员。返回成功移除的成员数量。

示例

import redis from 'redis';

let db = redis.open(config);

// 移除集合成员
let count = db.sRem('setKey', 'member1');
console.log(count); // 输出: 1

sIsMember

判断成员是否在集合中。返回布尔值。

示例

import redis from 'redis';

let db = redis.open(config);

// 判断成员是否在集合中
let isMember = db.sIsMember('setKey', 'member1');
console.log(isMember); // 输出: true

hSet

设置哈希字段的值。返回新添加字段的数量。

示例

import redis from 'redis';

let db = redis.open(config);

// 设置哈希字段的值
let count = db.hSet('hashKey', 'field1', 'value1');
console.log(count); // 输出: 1

hGet

获取哈希字段的值。如果字段不存在,则返回 null

示例

import redis from 'redis';

let db = redis.open(config);

// 获取哈希字段的值
let value = db.hGet('hashKey', 'field1');
console.log(value); // 输出: "value1"

hDel

删除哈希字段。返回删除的字段数量。

示例

import redis from 'redis';

let db = redis.open(config);

// 删除哈希字段
let count = db.hDel('hashKey', 'field1');
console.log(count); // 输出: 1

hGetAll

获取哈希的所有字段和值。返回字段和值的对象。

示例

import redis from 'redis';

let db = redis.open(config);

// 获取哈希的所有字段和值
let values = db.hGetAll('hashKey');
console.log(values); // 输出: { "field1": "value1", "field2": "value2" }

zAdd

向有序集合添加一个成员。返回新添加成员的数量。

示例

import redis from 'redis';

let db = redis.open(config);

// 向有序集合添加成员
let count = db.zAdd('zsetKey', 1, 'member1');
console.log(count); // 输出: 1

zRange

获取有序集合指定范围的成员。返回成员数组。

示例

import redis from 'redis';

let db = redis.open(config);

// 获取有序集合成员
let members = db.zRange('zsetKey', 0, -1);
console.log(members); // 输出: ["member1", "member2"]

zRem

移除有序集合中的一个成员。返回成功移除的成员数量。

示例

import redis from 'redis';

let db = redis.open(config);

// 移除有序集合成员
let count = db.zRem('zsetKey', 'member1');
console.log(count); // 输出: 1

zScore

获取有序集合中成员的分数。如果成员不存在,则返回 null

示例

import redis from 'redis';

let db = redis.open(config);

// 获取有序集合成员的分数
let score = db.zScore('zsetKey', 'member1');
console.log(score); // 输出: 1

subscribe

订阅频道。返回一个 PubSub 对象,用于接收消息和管理订阅。

示例

import redis from 'redis';

let db = redis.open(config);

// 订阅频道
let sub = db.subscribe('channel');
console.log(sub); // 输出: PubSub 对象

publish

发布消息到频道。返回接收到消息的订阅者数量。

示例

import redis from 'redis';

let db = redis.open(config);

// 发布消息
let count = db.publish('channel', 'message');
console.log(count); // 输出: 1

receiveMessage

接收订阅频道的消息。返回一个消息对象,包括 channelpayload 属性。

示例

import redis from 'redis';

let db = redis.open(config);

// 订阅频道
let sub = db.subscribe('channel');

// 接收消息
let msg = sub.receiveMessage();
console.log(msg); // 输出: { channel: "channel", payload: "message" }

close

关闭订阅。返回 undefined

示例

import redis from 'redis';

let db = redis.open(config);

// 订阅频道
let sub = db.subscribe('channel');

// 关闭订阅
sub.close();
console.log('订阅已关闭');

PubSub 对象

PubSub 对象用于管理和操作 Redis 的发布/订阅功能,详细描述如下:

方法概述

名称类型参数返回值说明
receive方法string接收订阅频道的消息
receiveMessage方法object接收订阅频道的消息
receiveTimeout方法timeout: intstring接收订阅频道的消息
ping方法message: stringboolean发送 Ping 消息
unsubscribe方法channel: stringboolean取消订阅频道
pSubscribe方法pattern: stringboolean订阅符合模式的频道
pUnsubscribe方法pattern: stringboolean取消订阅符合模式的频道
channel方法callback: FunctionFunction监听频道消息
close方法关闭订阅

receive

接收订阅频道的消息。返回一个字符串形式的消息。

示例

import redis from 'redis';

let db = redis.open(config);
let sub = db.subscribe('channel');

// 接收消息
let message = sub.receive();
console.log(message); // 输出: "message content"

receiveMessage

接收订阅频道的消息,返回一个消息对象,包括 channelpayloadpatternpayloadSlice 属性。

示例

import redis from 'redis';

let db = redis.open(config);
let sub = db.subscribe('channel');

// 接收消息对象
let msg = sub.receiveMessage();
console.log(msg.channel); // 输出: "channel"
console.log(msg.payload); // 输出: "message content"

receiveTimeout

在指定的超时时间内接收订阅频道的消息,返回一个字符串形式的消息。

示例

import redis from 'redis';

let db = redis.open(config);
let sub = db.subscribe('channel');

// 接收消息(超时)
let message = sub.receiveTimeout(5000); // 5秒
console.log(message); // 输出: "message content"

ping

发送 Ping 消息到频道,返回布尔值,指示操作是否成功。

示例

import redis from 'redis';

let db = redis.open(config);
let sub = db.subscribe('channel');

// 发送 Ping 消息
let result = sub.ping('ping message');
console.log(result); // 输出: true

unsubscribe

取消订阅频道,返回布尔值,指示操作是否成功。

示例

import redis from 'redis';

let db = redis.open(config);
let sub = db.subscribe('channel');

// 取消订阅
let result = sub.unsubscribe('channel');
console.log(result); // 输出: true

pSubscribe

订阅符合模式的频道,返回布尔值,指示操作是否成功。

示例

import redis from 'redis';

let db = redis.open(config);
let sub = db.subscribe('channel');

// 订阅模式
let result = sub.pSubscribe('pattern*');
console.log(result); // 输出: true

pUnsubscribe

取消订阅符合模式的频道,返回布尔值,指示操作是否成功。

示例

import redis from 'redis';

let db = redis.open(config);
let sub = db.subscribe('channel');

// 取消订阅模式
let result = sub.pUnsubscribe('pattern*');
console.log(result); // 输出: true

channel

监听频道消息并调用回调函数处理。返回一个函数对象,用于停止监听。

示例

import redis from 'redis';

let db = redis.open(config);
let sub = db.subscribe('channel');

// 监听频道消息
let stop = sub.channel((msg) => {
	console.log(msg); // 输出: "message content"
});

// 调用 stop() 停止监听
stop();

close

关闭订阅。返回 undefined

示例

import redis from 'redis';

let db = redis.open(config);
let sub = db.subscribe('channel');

// 关闭订阅
sub.close();
console.log('订阅已关闭');
更新时间 9/24/2024, 7:07:12 PM