爱智EdgerOS之深入解析数据库模块的Redis Client

一、Redis 简介

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

二、引入模块

  • EdgerOS 将 Redis 的客户端封装在了 redis 模块中,在开发中要使用时需要先引入该模块:
const redis = require('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 客户端等, 都可在官网中获取相关信息,希望本文可以对您的应用开发有所裨益。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/210027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51单片机c语言烧录软件,51单片机烧写程序的方法

STC89C51是应用广泛的51单片机,很多人都是通过该单片机入门学习的,单片机的学习需要勤动手。单片机需要烧写程序,要用到相关的软件和硬件。下面介绍一下51单片机烧写程序的方法。 1 所用到的硬件工具 51单片机烧写程序需要用到单片机的UART…

C语言数组(下)

我希望各位可以在思考之后去看本期练习,并且在观看之后独立编写一遍,以加深理解,巩固知识点。 练习一:编写代码,演⽰多个字符从两端移动,向中间汇聚 我们依旧先上代码 //编写代码,演⽰多个字…

数据库Delete的多种用法

数据库的Delete操作是用来删除数据库中的数据记录的,它是数据库操作中的一种重要操作,能够帮助用户删除不需要的数据,以便保持数据库的整洁和高效。在使用Delete操作时,需要注意确保操作的准确性和安全性,以免误删重要…

基于 Gin 的 HTTP 中间人代理 Demo

前面实现的代理对于 HTTPS 流量是进行盲转的,也就是说直接在 TCP 连接上传输 TLS 流量,但是我们无法查看或者修改它的内容。当然了,通常来说这也是不必要的。不过对于某些场景下还是有必要的,例如使用 Fiddler 进行抓包或者监控其…

触想嵌入式工业一体机在智能垃圾分类站的应用

1、行业发展背景 根据住建部给出的目标,到2025年前,全国地级及以上城市要基本建成垃圾分类处理系统。随着垃圾分类政策在全国强制落地,终端执行层面面临的最迫切问题是垃圾分类的准确性与社会参与意愿,而这两点与垃圾分类操作的简…

CNN发展史脉络 概述图整理

CNN发展史脉络概述图整理,学习心得,供参考,错误请批评指正。 相关论文: LeNet:Handwritten Digit Recognition with a Back-Propagation Network; Gradient-Based Learning Applied to Document Recogniti…

Python 中的数学运算(Python Math)

更多资料获取 📚 个人网站:ipengtao.com Python中的math模块是数学运算的重要工具,提供了丰富的数学函数和常数。本文将深入探讨math模块的功能和用法,使您能够更好地利用Python进行数学运算。 Python的math模块是一个强大的工具…

C51--OLED

GME12864-12 OLED写入指令数据: 1、start()开始 2、slave address 存积地址:011110 xx 写入:b 0111 1000 (0x78)(R / W位置为0时,表示写入) 3、ACK 4、cotro…

操作系统———磁盘调度算法模拟

实验目的 磁盘是可供多个进程共享的设备,当有多个进程都要求访问磁盘是,应采用一种最佳调度算法,以使各进程对磁盘的平均访问时间最小。目前最成用的磁盘调度算法有先来先服务(FCFS),最短寻道时间优先&…

Spring Boot的配置文件

配置文件的作用 整个项目中所有重要的数据都是在配置文件中配置,如数据库的连接信息,项目的启动端口,用于发现和定位问题的普通日志和异常日志等等。配置文件可以分为两类 系统使用的配置文件(系统配置文件)&#xf…

【Kotlin】

Lambda 就是一小段可以作为参数传递的代码。 因为正常情况下,我们向某个函数传参时只能传入变量,而借助Lambda 却允许传入一小段代码。 Lambda 表达式的语法结构: {参数名1: 参数类型, 参数名2: 参数类型 -> 函数体}首先,最外…

JS基础源码之手写模拟new

JS基础源码之手写模拟new 手写模拟new初步实现最终实现 手写模拟new new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一。 我们先看看new实现了哪些功能: function Person (name,age){this.name name;this.age age;this.habit Games;…

开发猿的平平淡淡周末---2023/12/9

上周回顾 完成了遗留的开发任务,基本全部完成进一步了解了系统当时设计的原理熟悉了代码的重构 2023.12.9 天气晴 温度适宜 前言 小伙伴们大家好,时间很快,又来到了周末,也是一个平平淡淡的周末。上周只更了一篇博客...原…

渗透测试 | 渗透测试之信息收集

渗透测试(penetration test,pentest)是实施安全评估(即审计)的具体手段。 渗透测试可能是单独进行的一项工作,也可能是常规研发生命周期(例如,Microsoft SDLC)里 IT 安全…

Unicode编码解码

一、Unicode概述 Unicode是一种字符编码标准,旨在解决不同字符集之间的兼容性问题。它为全球所有语言提供了一种统一的编码方式,使得各种字符能够在计算机系统中正确显示和处理。Unicode字符集包含了世界上几乎所有的字符,包括中文字符、英文…

算法Day23 简单吃饭(0-1背包)

简单吃饭(0-1背包) Description Input Output Sample 代码 import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();int total scanner.nextInt(…

WebDriver核心方法和属性:掌握自动化测试的利器

在自动化测试中,Selenium WebDriver是一个非常重要的工具。它提供了一种方式来模拟用户与浏览器的交互,从而进行各种操作,如点击按钮、输入文本等。本文将介绍WebDriver的核心方法和属性,以及如何使用它们。 1. 启动和关闭浏览器…

使用es256算法生成jwt

1、使用hutool来做 1、先去jwt解密/加密 - bejson在线工具弄个公私钥 2、导入hutool maven <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.22</version></dependency><depe…

高项备考葵花宝典-项目进度管理输入、输出、工具和技术(中,很详细考试必过)

项目进度管理的目标是使项目按时完成。有效的进度管理是项目管理成功的关键之一&#xff0c;进度问题在项目生命周期内引起的冲突最多。 小型项目中&#xff0c;定义活动、排列活动顺序、估算活动持续时间及制定进度模型形成进度计划等过程的联系非常密切&#xff0c;可以视为一…

Pytorch中的resize和reshape

torch.reshape() 官方文档的大致意思是&#xff1a; 返回与输入具有相同数据和元素数量的张量&#xff0c;但是具有指定形状。如果可能&#xff0c;返回的张量将是输入的视图&#xff0c;也就是说原本的tensor并没有被改变&#xff0c;如果想要改变那么就将改变的tensor赋值给…