介绍
ioredis是一个适用于Nodejs的Redis全功能客户端,健壮性以及高性能是它的亮点,支持Redis> = 2.6.12和(Node.js> = 6),ioredis是一个功能强大的功能强大的Redis客户,已被阿里巴巴和许多其他了不起的公司所使用。
Github
https://github.com/luin/ioredis
特性
安装
npm install ioredis
基本使用
var Redis = require("ioredis");
var redis = new Redis();
redis.set("foo", "bar");
redis.get("foo", function(err, result) {
console.log(result);
});
redis.del("foo");
// 或者如果最后一个参数不是函数,则使用Promise
redis.get("foo").then(function(result) {
console.log(result);
});
redis.sadd("set", 1, 3, 5, 7);
redis.sadd("set", [1, 3, 5, 7]);
// 所有参数都直接传递给redis服务器:
redis.set("key", 100, "EX", 10);连接到Redis
创建新的Redis实例后,将同时创建到Redis的连接。可以通过以下方式指定要连接的Redis:
new Redis(); // Connect to 127.0.0.1:6379
new Redis(6380); // 127.0.0.1:6380
new Redis(6379, "192.168.1.1"); // 192.168.1.1:6379
new Redis("/tmp/redis.sock");
new Redis({
port: 6379, // Redis port
host: "127.0.0.1", // Redis host
family: 4, // 4 (IPv4) or 6 (IPv6)
password: "auth",
db: 0
});使用TLS加密时,还可以将连接选项指定为redis:// URL或rediss:// URL:
new Redis("redis://:authpassword@127.0.0.1:6380/4");发布/订阅
这是发布/订阅API的简单示例。以下程序将打开两个客户端连接。它订阅一个连接的频道,然后发布另一个连接:
var Redis = require("ioredis");
var redis = new Redis();
var pub = new Redis();
redis.subscribe("news", "music", function(err, count) {
// 现在我们都订阅了“新闻”和“音乐”频道。
// `count` 代表我们当前订阅的频道数。
pub.publish("news", "Hello world!");
pub.publish("music", "Hello again!");
});
redis.on("message", function(channel, message) {
// 从新闻频道,收到消息Hello world!
// 从音乐频道再次收到消息Hello!
console.log("Receive message %s from channel %s", message, channel);
});
//还有一个称为“ messageBuffer”的事件,与“ message”相同,除了//返回缓冲区buffer而不是字符串。
redis.on("messageBuffer", function(channel, message) {
});还以类似方式支持PSUBSCRIBE:
redis.psubscribe("pat?ern", function(err, count) {});
redis.on("pmessage", function(pattern, channel, message) {});
redis.on("pmessageBuffer", function(pattern, channel, message) {});当客户端发出SUBSCRIBE或PSUBSCRIBE时,该连接将进入“订阅者”模式。那时,只有修改订阅集的命令才有效。当订阅集为空时,连接将恢复为常规模式。如果需要在订阅者模式下向Redis发送常规命令,只需打开另一个连接即可。
处理二进制数据
redis.set("foo", Buffer.from("bar"));每个命令都有一个返回Buffer的方法(通过在命令名后添加“ Buffer”后缀)。获取缓冲区buffer:
redis.getBuffer("foo", function(err, result) {
// result is a buffer.
});Pipelining
如果要发送一批命令(例如> 5),则可以使用流水线将命令在内存中排队,然后将它们一次全部发送到Redis。这样,性能提高了50%?300%。redis.pipeline()创建一个Pipeline实例。您可以像Redis实例一样在其上调用任何Redis命令。这些命令在内存中排队,并通过调用exec方法刷新到Redis:
var pipeline = redis.pipeline();
pipeline.set("foo", "bar");
pipeline.del("cc");
pipeline.exec(function(err, results) {
});
redis
.pipeline()
.set("foo", "bar")
.del("cc")
.exec(function(err, results) {});
var promise = redis
.pipeline()
.set("foo", "bar")
.get("foo")
.exec();
promise.then(function(result) {
});每个链接的命令还可以具有一个回调,该回调将在命令得到答复时被调用:
redis
.pipeline()
.set("foo", "bar")
.get("foo", function(err, result) {
// result === 'bar'
})
.exec(function(err, result) {
// result[1][1] === 'bar'
});除了将命令分别添加到管道队列之外,还可以将命令和参数数组传递给构造函数:
redis.pipeline([["set", "foo", "bar"], ["get", "foo"]]).exec(function() {
/* ... */
});length属性显示管道中有多少个命令:
const length = redis
.pipeline()
.set("foo", "bar")
.get("foo").length;
// length === 2。。。。。。
以上是借鉴Github上介绍的部分功能,如果需要详细了解它的所有功能,则可以直接参考Github上提供的文档API,非常详细,本文篇幅有限就不在此展示!
https://github.com/luin/ioredis
Redis可视化客户端
之前的文章中介绍了很多Redis的可视化管理客户端,今天就在介绍一个跨平台的Redis GUI——Medis。Medis是一个漂亮的,易于使用的Redis管理应用程序,它基于Electron,React和Redux构建在现代网络上。它由许多很棒的Node.js模块提供支持,尤其是ioredis和ssh2。
特性:
高级:
https://github.com/luin/medis
总结
如果你正愁在Nodejs下没有找到一个好用的Redis客户端,那么ioredis则是你可以选择的一个选项,好不好用还得试试才知道,Enjoy it!
