redis
redis
Vino Redis 模块提供了一个简单且强大的接口来管理和执行 Redis 操作。该模块适用于需要与 Redis 进行交互的各种应用场景,例如缓存管理、会话存储或任何需要持久化数据的应用。
初始化
redis
模块通过一个工厂函数提供客户端实例化。
名称 | 类型 | 参数 | 返回值 | 说明 |
---|---|---|---|---|
open() | 方法 | config: object | RedisClient 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 操作的方法,详细描述如下:
方法概述
名称 | 类型 | 参数 | 返回值 | 说明 |
---|---|---|---|---|
do | Function | command: string, ...args: any[] | any | 直接执行 Redis 命令 |
set | Function | key: string, value: any, expiration?: int | string | 设置一个键值对,并指定过期时间 |
get | Function | key: string | string | 获取一个键的值 |
del | Function | key: string | int | 删除一个或多个键 |
expire | Function | key: string, seconds: int | boolean | 设置键的过期时间 |
ttl | Function | key: string | int | 获取键的剩余过期时间 |
pTtl | Function | key: string | int | 获取键的剩余过期时间(毫秒) |
append | Function | key: string, value: string | int | 在字符串末尾追加值 |
setNX | Function | key: string, value: any, expiration?: int | boolean | 只有在key不存在时设置一个键值对。 |
scan | Function | index: int, key: string, limit: int | object | 模糊查询key |
mSet | Function | map: Map | string | 批量设置键值对 |
lPush | Function | key: string, ...value: any[] | int | 向列表左端插入一个或多个值 |
rPush | Function | key: string, ...value: any[] | int | 向列表右端插入一个或多个值 |
lPop | Function | key: string | any | 从列表左端弹出一个值 |
rPop | Function | key: string | any | 从列表右端弹出一个值 |
lRange | Function | key: string, start: int, end: int | string[] | 获取列表指定范围的元素 |
sAdd | Function | key: string, ...int: any[] | int | 向集合添加一个或多个成员 |
sMembers | Function | key: string | string[] | 获取集合的所有成员 |
sRem | Function | key: string, ...int: any[] | int | 从集合中移除一个或多个成员 |
sIsMember | Function | key: string, int: any | boolean | 判断成员是否在集合中 |
hSet | Function | key: string, field: string, value: any | int | 设置哈希字段的值 |
hGet | Function | key: string, field: string | any | 获取哈希字段的值 |
hDel | Function | key: string, field: string | int | 删除哈希字段 |
hGetAll | Function | key: string | object | 获取哈希的所有字段和值 |
zAdd | Function | key: string, score: int, member: string | int | 向有序集合添加一个成员 |
zRange | Function | key: string, start: int, end: int | string[] | 获取有序集合指定范围的成员 |
zRem | Function | key: string, int: string | int | 移除有序集合中的一个成员 |
zScore | Function | key: string, int: string | int | 获取有序集合中成员的分数 |
subscribe | Function | channel: string | PubSub | 订阅频道 |
publish | Function | channel: string, message: string | int | 发布消息到频道 |
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
接收订阅频道的消息。返回一个消息对象,包括 channel
和 payload
属性。
示例
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: int | string | 接收订阅频道的消息 |
ping | 方法 | message: string | boolean | 发送 Ping 消息 |
unsubscribe | 方法 | channel: string | boolean | 取消订阅频道 |
pSubscribe | 方法 | pattern: string | boolean | 订阅符合模式的频道 |
pUnsubscribe | 方法 | pattern: string | boolean | 取消订阅符合模式的频道 |
channel | 方法 | callback: Function | Function | 监听频道消息 |
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
接收订阅频道的消息,返回一个消息对象,包括 channel
、payload
、pattern
和 payloadSlice
属性。
示例
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('订阅已关闭');