愛智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.pswp.cn/news/210027.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210027.shtml
英文地址,請注明出處:http://en.pswp.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賦值給…