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

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

ccwgpt 2024-12-14 10:32 63 浏览 0 评论

介绍

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!

    相关推荐

    一个基于.Net Core遵循Clean Architecture原则开源架构

    今天给大家推荐一个遵循CleanArchitecture原则开源架构。项目简介这是基于Asp.netCore6开发的,遵循CleanArchitecture原则,可以高效、快速地构建基于Ra...

    AI写代码翻车无数次,我发现只要提前做好这3步,bug立减80%

    写十万行全是bug之后终于找到方法了开发"提示词管理助手"新版本那会儿,我差点被bug整崩溃。刚开始两周,全靠AI改代码架构,结果十万行程序漏洞百出。本来以为AI说没问题就稳了,结果...

    OneCode低代码平台的事件驱动设计:架构解析与实践

    引言:低代码平台的事件驱动范式在现代软件开发中,事件驱动架构(EDA)已成为构建灵活、松耦合系统的核心范式。OneCode低代码平台通过创新性的注解驱动设计,将事件驱动理念深度融入平台架构,实现了业务...

    国内大厂AI插件评测:根据UI图生成Vue前端代码

    在IDEA中安装大厂的AI插件,打开ruoyi增强项目:yudao-ui-admin-vue31.CodeBuddy插件登录腾讯的CodeBuddy后,大模型选择deepseek-v3,输入提示语:...

    AI+低代码技术揭秘(二):核心架构

    本文档介绍了为VTJ低代码平台提供支持的基本架构组件,包括Engine编排层、Provider服务系统、数据模型和代码生成管道。有关UI组件库和widget系统的信息,请参阅UI...

    GitDiagram用AI把代码库变成可视化架构图

    这是一个名为gitdiagram的开源工具,可将GitHub仓库实时转换为交互式架构图,帮助开发者快速理解代码结构。核心功能一键可视化:替换GitHubURL中的"hub...

    30天自制操作系统:第六天:代码架构整理与中断处理

    1.拆开bootpack.c文件。根据设计模式将对应的功能封装成独立的文件。2.初始化pic:pic(可编程中断控制器):在设计上,cpu单独只能处理一个中断。而pic是将8个中断信号集合成一个中断...

    AI写代码越帮越忙?2025年研究揭露惊人真相

    近年来,AI工具如雨后春笋般涌现,许多人开始幻想程序员的未来就是“对着AI说几句话”,就能轻松写出完美的代码。然而,2025年的一项最新研究却颠覆了这一期待,揭示了一个令人意外的结果。研究邀请了16位...

    一键理解开源项目:两个自动生成GitHub代码架构图与说明书工具

    一、GitDiagram可以一键生成github代码仓库的架构图如果想要可视化github开源项目:https://github.com/luler/reflex_ai_fast,也可以直接把域名替换...

    5分钟掌握 c# 网络通讯架构及代码示例

    以下是C#网络通讯架构的核心要点及代码示例,按协议类型分类整理:一、TCP协议(可靠连接)1.同步通信//服务器端usingSystem.Net.Sockets;usingTcpListene...

    从复杂到优雅:用建造者和责任链重塑代码架构

    引用设计模式是软件开发中的重要工具,它为解决常见问题提供了标准化的解决方案,提高了代码的可维护性和可扩展性,提升了开发效率,促进了团队协作,提高了软件质量,并帮助开发者更好地适应需求变化。通过学习和应...

    低代码开发当道,我还需要学习LangChain这些框架吗?| IT杂谈

    专注LLM深度应用,关注我不迷路前两天有位兄弟问了个问题:当然我很能理解这位朋友的担忧:期望效率最大化,时间用在刀刃上,“不要重新发明轮子”嘛。铺天盖地的AI信息轰炸与概念炒作,很容易让人浮躁与迷茫。...

    框架设计并不是简单粗暴地写代码,而是要先弄清逻辑

    3.框架设计3.框架设计本节我们要开发一个UI框架,底层以白鹭引擎为例。框架设计的第一步并不是直接撸代码,而是先想清楚设计思想,抽象。一个一个的UI窗口是独立的吗?不是的,...

    大佬用 Avalonia 框架开发的 C# 代码 IDE

    AvalonStudioAvalonStudio是一个开源的跨平台的开发编辑器(IDE),AvalonStudio的目标是成为一个功能齐全,并且可以让开发者快速使用的IDE,提高开发的生产力。A...

    轻量级框架Lagent 仅需20行代码即可构建自己的智能代理

    站长之家(ChinaZ.com)8月30日消息:Lagent是一个专注于基于LLM模型的代理开发的轻量级框架。它的设计旨在简化和提高这种模型下代理的开发效率。LLM模型是一种强大的工具,可以...

    取消回复欢迎 发表评论: