一文搞懂 EdgerOS 数据库模块的 Redis Client

leecactus0 2022-08-25 17:59:33

无论是什么类型的应用,都少不了和数据打交道。尤其是一些复杂的应用场景,都少不了一个高效可靠的数据库。例如日常开发中最常见的 MySQL 等关系型数据库,让数据的存储、检索轻松简单起来,甚至可以轻松地处理百万量级的数据。而从广义上讲,数据库可以分为二大类,分别是关系型数据库与非关系型数据库,上一期我们讲过的 SQLite 即为关系型数据库,而本文要讲的 Redis 则是非关系型数据库,是一个以  BSD 协议发行的、开源免费的,并具备极高性能的键值数据库。同时 Redis 也是业务应用中最为常见的“缓存”数据库。

 

为了方便应用开发, EdgerOS 同样引入了 Redis 的客户端模块,满足不同业务场景下对数据处理的需求。开发者可以使用改客户端方便地连接并使用 Redis 服务器。

 

引入模块

 

    
    const redis = require('redis');

    EdgerOS 将 Redis 的客户端封装在了 redis 模块中,在开发中要使用时需要先引入该模块。

     

    创建客户端

    使用 createClient 方法来创建 Redis 客户端,调用此方法会返回一个 RedisClient 的对象;

    redis.createClient([options])

      • options {Object} 选项

      • returns: {Redis} 返回一个 RedisClient 的对象

     

    示例如下:

    
    const redis = require('redis');
    const client = redis.createClient({ 
          host: '10.4.0.180', 
          port: 6379,
          detect_buffers: true
    });
    // or
    const client = redis.createClient({
          host: '10.4.0.180',
          port: 6379,
          retry_strategy: function (options) {
              if (options.error && options.error.code === 'ECONNREFUSED') {
                  // 发生 'ECONNREFUSED' 错误时候断开链接,并刷新所有命令
                  return new Error('The server refused the connection');
                  }
              if (options.total_retry_time > 1000 * 60 * 60) {
                  // 发生‘重连超时’错误时候断开链接,并刷新所有命令
                  return new Error('Retry time exhausted');
                  }
              if (options.attempt > 10) {
                  // 断开连接并抛出一个错误
                  return undefined;
                  }
              // 重连之后
              return Math.min(options.attempt * 100, 3000);
          },
     });
    

    相关选项说明:

    • host:Redis 服务器的地址

    • port:Redis 服务器的端口

    • detect_buffers:回复是否使用 Buffer 选项

    • retry_strategy:将选项对象作为参数的一种函数

     

    保存与读取数据

    使用 hmset 方法来保存数据, 允许存储多组数据

    client.hmset(hash, key1, val1, ...keyN, valN[, callback])

    • hash {String} Redis 键

    • key {String} 字段的键

    • val {String | Buffer | Number | Date} 字段的值

    • callback {Function} 回调函数

      • error {Error} 错误对象

         

    使用 hgetall 方法来读取数据

    client.hgetall(hash[, callback])

    • hash {String} Redis 键

    • callback {Function} 回调函数

      • error {Error} 错误对象

      • value {Object} 获取的结果

     

    示例如下:

    const redis = require('redis');
    const client = redis.createClient({ host: '10.4.0.180', port: 6379 });
    
    client.hmset('key', 'foo', 'bar', 'hello', 'world');
    
    client.hgetall('key', function (err, value) {
         console.log(value.foo); // > 'bar'
         console.log(value.hello); // > 'world'
    });

    订阅与发布

     

    使用 publish 方法进行客户端消息发布

    client.publish(channel, message)

    • channel {String} 发布的路径

    • message {String | Number | Buffer | Date} 发布的消息

     

    使用 subscribe 方法对服务端的消息进行订阅

    client.subscribe(channel)

    • channel {String} 订阅的路径

       

    示例如下:

    
    const redis = require('redis');
    
    const subscriber = redis.createClient({ host: '10.4.0.180', port: 6379 });
    const publisher = redis.createClient({ host: '10.4.0.180', port: 6379 });
    
    let messageCount = 0;
    
    subscriber.on('subscribe', function (channel, count) {
         publisher.publish('a channel', 'a message');
         publisher.publish('a channel', 'another message');
    });
    
    subscriber.on('message', function (channel, message) {
         messageCount += 1;
         console.log("Subscriber received message in channel '" + channel + "': " + message);
         if (messageCount === 2) {
               subscriber.unsubscribe();
               subscriber.quit();
               publisher.quit();
          }
    });
    
    subscriber.subscribe('a channel');

    至此,Redis 客户端的主要功能与实现相信大家都有一个初步的认识,由于篇幅所限,不能完整详细的阐述 Redis Client 模块的所有功能,有兴趣的同学可以从我们 EdgerOS 官网获取完整信息。而我们EdgerOS 除了提供 Redis 客户端以外, 还有像非关系型数据库中的 Mysql 客户端等, 都可在官网中获取相关信息,希望本文可以对您的应用开发有所裨益。

     

    相关链接

    Redis Client 官方文档

    EdgerOS 官网

     

    ...全文
    183 回复 打赏 收藏 转发到动态 举报
    写回复
    用AI写文章
    回复
    切换为时间正序
    请发表友善的回复…
    发表回复
    代码转载自:https://pan.quark.cn/s/eefcd5647328 在信息技术行业中,BIOS(基本输入输出系统)扮演着计算机硬件与操作系统之间的重要桥梁角色,其主要职责包括对硬件进行初始化和检测,以及负责启动操作系统的加载流程。联想Y430P作为一款广受用户青睐的便携式计算设备,而“联想Y430P-刷BIOS V3.66”特指将这款设备的BIOS版本升级至V3.66的具体操作。此类操作有时是不可或缺的,因为BIOS的升级能够修正已知的系统缺陷,优化硬件的互操作性,或者提升整体运行效能。 我们必须明确为何需要进行BIOS的刷新操作。联想Y430P设备可能存在某些功能上的约束,比如网卡白名单机制,这种机制会限制用户更换非原装硬件设备,例如无线网络适配器。网卡白名单是BIOS内嵌的一种安全防护措施,它仅允许经过认证的特定型号网卡在系统中正常工作,以此来保障系统的兼容性与稳定性。然而,这种安全特性同时也对用户自主进行硬件升级造成了限制。通过安装新版本的BIOS,我们可以移除这类限制条件,使系统能够识别并兼容更多种类的网卡设备,具体而言,在更新至BIOS V3.66版本后,用户可以自由更换网卡和显卡,而不会触发设备未获授权的警示信息。 在执行BIOS刷新操作之前,必须保持高度的审慎态度,因为不恰当的BIOS更新可能导致设备无法正常启动。以下是进行BIOS刷新的标准流程: 1. **保存当前BIOS状态**:在执行更新之前,强烈建议对现有的BIOS进行备份,以便在更新后出现问题时能够迅速恢复至初始状态。 2. **获取精确版本的BIOS更新包**:需从官方渠道或可信赖的第三方资源中下载与联想Y430P设备相匹配的BIOS V3.66升级文件。 3. *...

    1,589

    社区成员

    发帖
    与我相关
    我的任务
    社区描述
    爱智开发者平台是一个开放的物联网平台,通过爱智世界,应用开发者可以把自己的应用分发到亿万用户的设备上,硬件开发者能够把设备能力开放给海量的开发者,让优质的应用脱颖而出,为用户提供更优秀的使用体验。
    边缘计算物联网javascript 企业社区
    社区管理员
    • EdgerOS
    • Lumos_zbj
    • dayinfinite
    加入社区
    • 近7日
    • 近30日
    • 至今
    社区公告
    暂无公告

    试试用AI创作助手写篇文章吧