百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

适用于Node.js的健壮、注重性能的全功能Redis客户端——ioredis

wptr33 2024-12-18 17:31 34 浏览

介绍

ioredis是一个适用于Nodejs的Redis全功能客户端,健壮性以及高性能是它的亮点,支持Redis> = 2.6.12和(Node.js> = 6),ioredis是一个功能强大的功能强大的Redis客户,已被阿里巴巴和许多其他了不起的公司所使用。







Github

https://github.com/luin/ioredis

特性

  • 功能齐全。它支持Cluster,Sentinel,Pipelining,当然还支持Lua脚本和Pub / Sub(具有二进制消息的支持)
  • 高性能
  • 易于使用的API。它与Node回调和本机Promise一起使用
  • 命令参数和回复的转换
  • 透明键前缀
  • Lua脚本的抽象,允许您定义自定义命令
  • 支持二进制数据
  • 支持TLS
  • 支持脱机队列和就绪检查
  • 支持ES6类型,例如Map和Set
  • 支持GEO命令(Redis 3.2不稳定)
  • 复杂的错误处理策略
  • 支持NAT映射
  • 安装

    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。







    特性:

  • 按键查看/编辑
  • SSH隧道,用于连接远程服务器
  • 执行自定义命令的终端
  • 配置查看/编辑
  • 高级:

  • JSON / MessagePack格式查看/编辑和内置高亮显示/验证
  • 在不阻止Redis服务器的情况下使用数百万个键和键成员
  • 模式管理器,可轻松选择子键组。
  • https://github.com/luin/medis

    总结

    如果你正愁在Nodejs下没有找到一个好用的Redis客户端,那么ioredis则是你可以选择的一个选项,好不好用还得试试才知道,Enjoy it!

    相关推荐

    什么是Java中的继承?如何实现继承?

    什么是继承?...

    Java 继承与多态:从基础到实战的深度解析

    在面向对象编程(OOP)的三大支柱中,继承与多态是构建灵活、可复用代码的核心。无论是日常开发还是框架设计,这两个概念都扮演着至关重要的角色。本文将从基础概念出发,结合实例与图解,带你彻底搞懂Java...

    Java基础教程:Java继承概述_java的继承

    继承概述假如我们要定义如下类:学生类,老师类和工人类,分析如下。学生类属性:姓名,年龄行为:吃饭,睡觉老师类属性:姓名,年龄,薪水行为:吃饭,睡觉,教书班主任属性:姓名,年龄,薪水行为:吃饭,睡觉,管...

    java4个技巧:从继承和覆盖,到最终的类和方法

    日复一日,我们编写的大多数Java只使用了该语言全套功能的一小部分。我们实例化的每个流以及我们在实例变量前面加上的每个@Autowired注解都足以完成我们的大部分目标。然而,有些时候,我们必须求助于...

    java:举例说明继承的概念_java继承的理解

    在现实生活中,继承一般指的是子女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物,同理,...

    从零开始构建一款开源的 Vibe Coding 产品 Week1Day4:业界调研之 Agent 横向对比

    前情回顾前面两天我们重点调研了了一下Cursor的原理和Cursor中一个关键的工具edit_file的实现,但是其他CodingAgent也需要稍微摸一下底,看看有没有优秀之处,下...

    学会这几个插件,让你的Notepad++使用起来更丝滑

    搞程序开发的小伙伴相信对Notepad++都不会陌生,是一个占用空间少、打开启动快的文件编辑器,很多程序员喜欢使用Notepad++进行纯文本编辑或者脚本开发,但是Notepad++的功能绝不止于此,...

    将 node_modules 目录放入 Git 仓库的优点

    推荐一篇文章Whyyoushouldcheck-inyournodedependencies[1]...

    再度加码AI编程,腾讯发布AI CLI并宣布CodeBuddy IDE开启公测

    “再熬一年,90%的程序员可能再也用不着写for循环。”凌晨两点半,王工还在公司敲键盘。他手里那份需求文档写了足足六页,产品经理反复改了三次。放在过去,光数据库建表、接口对接、单元测试就得写两三天。现...

    git 如何查看stash的内容_git查看ssh key

    1.查看Stash列表首先,使用gitstashlist查看所有已保存的stash:...

    6万星+ Git命令懒人必备!lazygit 终端UI神器,效率翻倍超顺手!

    项目概览lazygit是一个基于终端的Git命令可视化工具,通过简易的TUI(文本用户界面)提升Git操作效率。开发者无需记忆复杂命令,即可完成分支管理、提交、合并等操作。...

    《Gemini CLI 实战系列》(一)Gemini CLI 入门:AI 上命令行的第一步

    谷歌的Gemini模型最近热度很高,而它的...

    deepin IDE新版发布:支持玲珑构建、增强AI智能化

    IT之家8月7日消息,深度操作系统官方公众号昨日(8月6日)发布博文,更新推出新版deepin集成开发环境(IDE),重点支持玲珑构建。支持玲珑构建deepinIDE在本次重磅更...

    狂揽82.7k的star,这款开源可视化神器,轻松创建流程图和图表

    再不用Mermaid,你的技术文档可能已经在悄悄“腐烂”——图表版本对不上、同事改完没同步、评审会上被一句“这图哪来的”问得哑口无言。这不是危言耸听。GitHub2025年开发者报告显示,63%的新仓...

    《Gemini CLI 实战系列》(五)打造专属命令行工具箱

    在前几篇文章中,我们介绍了GeminiCLI的基础用法、效率提升、文件处理和与外部工具结合。今天我们进入第五篇...